JNI实现了C/C++与Java的相互访问,那么这篇文章就从C/C++访问Java开始说起 native函数说明 每个native函数,都至少有两个参数(JNIEnv *和jclass或jobject) 当native方法为静态方法时,采用jclass,此时jclass代表native方法所属类的class对象 当native方法为非静态时,使用jobject,此时jobject代表native方法所属对象 JNI数据类型 基本数据类型 Java的基本数据类型与JNI数据类型成映射关系 Java…
前面讲到记录到ffmpeg音视频解码的时候,采用的是在主线程中进行操作,这样是不行的,在学习了POSIX多线程操作以后,就可以实现其在子线程中解码了,也可以实现音视频同步了 简单示例 在native实现中,直接调用pthread的多线程方法,这样就可以在JNI层实现多线程,下面是一个简单的实现多线程的例子 #include <stdlib.h> #include <unistd.h> #include <pthread.h> #include <android/l…
在使用JNI的时候,可能会产生异常,此时就需要对异常进行处理 异常处理 JNI抛出Throwable异常,在Java层可以用Throwable捕捉 而在C只有清空异常这种处理 但如果在JNI中通过ThrowNew抛出异常,则在Java曾可以捕获 例子(在native访问不存在的属性) Java中声明native方法 public native void exception(); 在native中进行处理 JNIEXPORT void JNICALL Java_com_cj5785_jni_Jni…
JNI(Java Native Interface)Java本地化接口,Java调用C/C++,C/C++调用Java的一套API接口 实现步骤 在Java源文件中编写native方法 public native static String getStringFromC(); 到Java源代码src路径下,使用javah命令生成.h头文件 注意:此处的参数为包名+类名 //生成的头文件为:com_cj5785_jni_JniTest.h javah com.cj5785.jni.JniTest…
JNI中的引用意在告知虚拟机何时回收一个JNI变量 JNI引用变量分为局部引用和全局引用 局部引用 局部引用,通过DeletLocalRef手动释放对象 原因 访问一个很大的Java对象,使用之后还用进行复杂的耗时操作 创建了大量的局部引用,占用了太多的内存,而且这些局部引用跟后面的操作没有关联性 局部引用示例 Java中存在native方法 public native void localRef(); 在native中有调用对象,但对象在使用以后就不再使用,此时就可以将对象释放掉,以节约内存…
本文转自:http://www.cnblogs.com/skywang12345/archive/2013/05/23/3094037.html 本文介绍JNI的数据类型.NDK中关于JNI数据类型的定义都在jni.h中,大家可以参考jni.h.jni.h在ndk中的路径参考: android-ndk-r7b/platforms/android-/arch-arm/usr/include/jni.h 1 基本数据类型 为了使用方便,JNI还提供了以下定义: #define JNI_FALSE 0…
目标:支持可变属性 反模式:使用泛型属性表.这种设计成为实体-属性-值(EAV),也可叫做开放架构.名-值对. 优点:通过增加一张额外的表,可以有以下好处 (1)表中的列很少: (2)新增属性时,不需要新增列.不会影响现有表的结构: (3)存储的字段内容不会为空值. 缺点:(1)查询语句变得更加复杂: (2)使用EAV设计后,需要放弃传统的数据库设计所带来的方便之处,比如:无法保障数据完整性: (3)无法使用SQL的数据类型,比如对日期.金钱等格式内容都只能保持为字符串类型: (4)无法确保引用…
计划按例如以下顺序完毕这篇笔记: Java程序猿的JavaScript学习笔记(1--理念) Java程序猿的JavaScript学习笔记(2--属性复制和继承) Java程序猿的JavaScript学习笔记(3--this/call/apply) Java程序猿的JavaScript学习笔记(4--this/闭包/getter/setter) Java程序猿的JavaScript学习笔记(5--prototype) Java程序猿的JavaScript学习笔记(6--面向对象模拟) Java程…
学习笔记 关于Jquery的merge方法 话不多说,先上图 使用jquery时,其智能提示如上,大概意思就是合并first和second两个数组,得到的结果是first+(second去重后的结果)的并集 接下来,做出测试: $(function () { var arr1 = ['apple', 'orange',1, 'cherry', 'orange']; var arr2 = ['chen', 343, true, 'cherry',1]; var result = $.merge(a…
<深入Java虚拟机学习笔记>- 第19章 方法的调用与返回…
目标:存储多值属性 反模式:创建多个列.比如一个人具有多个电话号码.座机号码.手机号码等. 1.查询:多个列的话,查询时可能不得不用IN,或者多个OR: 2.添加.删除时确保唯一性.判断是否有值:这些都很麻烦: 3.字段的列数无法确定具体数量. 如何识别反模式:当出现以下情况时,可能是反模式 1.应该支持的动态列的数量是多少? 2.如何才能在SQL查询中同时查询多列? 合理使用反模式: 在默写情况下,一个属性可能有固定数量的候选值,并且他们的存储位置和顺序都是固定的.这样的话,可以使用反模式.…
Go学习笔记07-结构体与方法 Go语言 面向对象 结构的定义与创建 面向对象 Go语言只支持封装,不支持继承和多态. Go语言中只有struct,即结构体:没有class. 结构的定义与创建 package main  import "fmt"  //定义结构  type treeNode struct {  value int  left, right *treeNode  }  //自定义的工厂函数  func createNode(value int) *treeNode{ …
#!/usr/bin/env python# -*- coding:utf-8 -*-'''Selenium3+webdriver学习笔记10(元素属性.页面源码)'''from selenium import webdriverfrom selenium.webdriver.common.action_chains import ActionChainsfrom selenium.webdriver.support.select import Selectimport reimport tim…
属性: 公有属性  (属于类,每个类一份) 普通属性  (属于对象,每个对象一份) 私有属性    (属于对象,跟普通属性相似,只是不能通过对象直接访问) 方法:(按作用) 构造方法 析构函数 方法:(按类型) 普通方法 私有方法(方法前面加两个下划线) 静态方法 类方法 属性方法 静态方法 @staticmethod静态方法,通过类直接调用,不需要创建对象,不会隐式传递self 类方法 @classmethod类方法,方法中的self是类本身,调用方法时传的值也必须是类的公有属性,就是说类方法…
所有 HTML 元素被定义为对象,而编程接口(对象的访问)则是对象方法和对象属性. 事实上,常用的只用window对象及其子对象document对象,以及事件Event对象. Window 对象 Window 对象表示浏览器中打开的窗口.调用时可省略Window 如果文档包含框架(frame 或 iframe 标签),浏览器会为 HTML 文档创建一个 window 对象,并为每个框架创建一个额外的 window 对象. 注意: 没有应用于 window 对象的公开标准,不过所有浏览器都支持该对…
一.原理 当在系统中调用System.loadLibrary函数时,该函数会找到对应的动态库, 然后首先试图找到"JNI_OnLoad"函数,如果该函数存在,则调用它 JNI_OnLoad可以和JNIEnv的registerNatives函数结合起来,实现动态的函数替换 二. 实战 用ndk学习17的例子继续, 下面演示动态替换TestJni中的sayHello jstring JNICALL Java_org_bing_testjni_MainActivity_sayHello (J…
面向对象的底层实现 java作为面向对象高级语言,可对现实世界进行建模.和面向过程不同的是面向对象软件的编写不是流程的堆积,而是对业务逻辑的多视角分解和分类.其过程大致为:      1).将知识分解成不同粒度的小概念.      2).对概念进行分类,形成类.模块.系统      3).用计算机语言将其实现为对象(包含操作和数据) 然而,大多程序员编写代码时很少思考面向对象的体系是如何实现的.因为它属于底层,并不必要.但是,学习过Java反射技术并有所思考的人会意识到,面向对象的种种语法本身也…
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>HTML5学习笔记</title> </head> <body bgcolor="#90ee90"> 1.Html5的元素<br/><br/> 元素指的是从開始标签到结束标签的全部代码<…
1 应用层代码 NdkParam.java是JNI函数的调用类,它的代码如下:   package com.skywang.ndk; import android.app.Activity; import android.os.Bundle; import android.util.Log; public class NdkParam extends Activity { public static final String TAG="skywang--NdkParam"; /** C…
本文主要是说明一下在eclipse下如何对NDK进行配置 配置NDK 虽然现在基本上都使用Android Studio进行Android开发,但一些项目在eclipse中仍有运用,这里讲一讲eclipse的NDK配置 在最开始下载的adt里面是没有NDK这个选项的,那么就要进行配置,手动安装 eclipse界面下Help -> Install New Software... -> Work with 输入 https://dl-ssl.google.com/android/eclipse/,点…
在ECMAScript中有两种属性:数据属性和访问器属性 1.数据属性 configurable:表示能否通过delete删除属性从而重新定义属性:或者能否修改属性的特性:或者能否把属性修改为访问器属性. enumerable:表示能否通过for-in循环返回属性. writable:表示能否修改属性的值. value:包含这个属性的数据值,读取属性的时候,从这个位置读:写入属性的时候,把新的值保存在这个位置. 2.访问器属性 configurable:表示能否通过delete删除属性从而重新定…
Python基础 对于Python,一切事物都是对象,对象基于类创建         不同类型的类可以创造出字符串,数字,列表这样的对象,比如"koka".24.['北京', '上海', '深圳'] 数据类型 1.如何查找数据类型支持的方法 python终端: name=”koka“ type(name) <class 'str'> help(str) #即可显示所有字符串支持的方法或者dir(name) #也可以显示对象中的所有特性. 使用Pycharm: 在py文件中输…
概述: Windows Presentation Foundation (WPF) 提供了一组服务,这些服务可用于扩展公共语言运行时 (CLR) 属性的功能.这些服务通常统称为 WPF 属性系统.由 WPF 属性系统支持的属性称为依赖项属性. 依赖项属性提供用来扩展属性功能的功能, 最常用的莫过于“数据绑定”功能,依赖项属性可以通过数据绑定来引用值.数据绑定通过特定的标记扩展语法(在 XAML 中)或 Binding 对象(在代码中)来工作.使用数据绑定,最终属性值的确定将延迟到运行时,在运行时…
前面将的都是如何使用C/C++文件生成so动态库,那么在使用别人的so动态库的时候应该怎么做呢?这篇文章就是使用一个变声功能的动态库,完成对于以有so动态库的说明. 动态库来源 在互联网中,有着许许多多动态库,很多厂商也对外提供动态库供开发者调用,例如高德地图的动态库,做地图开发的时候还是很方便的 本文主要讲一个可以使声音改变的动态库,这个动态库主要用于游戏中,游戏引擎中有使用到 这就是fmod动态库,首先我们要去下载其动态库文件 官网地址 先要注册才能下载其文件,按照步骤来就好 在其下载界面,…
(搬运自我在SegmentFault的博客) 一.扩展方法 扩展方法使你能够向现有类型"添加"方法,而无需创建新的派生类型.重新编译或以其他方式修改原始类型. 注意事项: 扩展方法需要是静态方法. 第一个参数指明作用的类型,并且用this关键字修饰. 其他参数跟在第一个参数的后面. 需要使用using指令将扩展方法所在的命名空间导入到源代码中. 该类型以实例方法的形式调用该方法. 编译器生成的中间语言 (IL) 会将代码转换为对静态方法的调用. 扩展方法无法访问它们所扩展的类型中的私有…
系统:WIN8.1 数据库:Oracle 11GR2 开发工具:MyEclipse 8.6 框架:Spring3.2.9.SpringMVC3.2.9.MyBatis3.2.8 先看代码: @RequestMapping(value="manager") @Controller("managerController") public class ManagerController { /** * 后台用户登录 * @param request * @param em…
局部内部类是定义在方法体或代码块中的类,在笔记19中已有过简单介绍. 今天要讨论的是局部内部类为什么只能访问为常量的局部变量. 作者: 博客园--蝉蝉 请尊重作者劳动成果,转载请在标题注明“转载”字样,并标明原文链接: http://www.cnblogs.com/chanchan/p/8402411.html 参考资料: http://www.cnblogs.com/dolphin0520/p/3811445.html 1.首先来了解一下局部内部类是如何访问局部变量的 Person类是外部类,…
1.JNI是什么 JNI是Java Native Interface的缩写,它提供若干的API实现Java与其他语言之间的通信.而Android Framework由基于Java语言的的Java层与基于C/C++语言的C/C++层组成,每个层中的功能模块都是以有相应的语言编写,并且两层中的大部分模块有着千丝万缕的联系.而在两层之间充当连接桥梁这一角色的就是JNI,它允许Java代码和C/C++编写的应用程序与库之间进行交互:通常在以下几种情况下使用JNI 1.注重处理速度,C/C++的处理速度要…
还是先从浏览器直观的感受下实例属性和方法. 实例属性: 对应解释如下: vm._uid // 自增的id vm._isVue // 标示是vue对象,避免被observe vm._renderProxy // Proxy代理对象 vm._self // 当前vm实例 vm.$parent // 用于自定义子组件中,指向父组件的实例 vm.$root // 指向根vm实例 vm.$children // 当前组件的子组件实例数组 vm.$refs vm._watcher = null vm._in…
学习了es6语法的symbol类型,整理笔记,闲时复习. Symbol 是es6新增的第七种原始数据类型(null,string,number,undefined,boolean,object),是为了在对象中对属性名滥用而导致的冲突问题. ps: 既然是数据类型,不是对象,那么就不能用new命令,因此不能添加属性 let a = Symbol('a') console.log(a) // Symbol(a) console.log(typeof a) // symbol 简单来说:一旦声明一个…