- 浏览: 76367 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (81)
- struts2 (4)
- struts1 (0)
- hibernate (5)
- spring (1)
- jboss (2)
- tomcat (4)
- java (17)
- 系统设计 (2)
- C++ (0)
- C (0)
- ASM (0)
- linux (10)
- freebsd (0)
- windows (1)
- oracle (4)
- HTML (0)
- CSS (1)
- JavaScript (3)
- 数据库设计 (2)
- 虚拟机 (2)
- 编码规范 (1)
- eclipse (3)
- postgresql (3)
- IT杂想 (4)
- svn (3)
- ActiveMQ (2)
- SQL (1)
- jsp/servlet (1)
- SQL_SERVER (1)
- Apusic (1)
最新评论
-
q821424508:
我的项目里又个jboss-javaee.jar 删除之后貌似没 ...
The s:form tag declares that it accepts dynamic attributes but does not implemen
System.out.println(FileContextCache.class);
ByteArrayOutputStream baos = new ByteArrayOutputStream();
ObjectOutputStream oos = new ObjectOutputStream(baos);
oos.writeObject(FileContextCache.class);
byte[] data = baos.toByteArray();
int length = data.length;
System.out.println(data);
ByteArrayInputStream bais = new ByteArrayInputStream(data);
ObjectInputStream ois = new ObjectInputStream(bais);
Class d = (Class) ois.readObject();
System.out.println(d);
System.out.println(d);
FileContextCache dd = (FileContextCache)d.newInstance();
System.out.println(dd);
System.out.println(dd);
通过 上面的代码可以发现,可以从一个byte[]数组中实例化一个java对象。
所以这个byte[]可以由jni来由C语言动态库生成,然后在java中再实例化这个对象.
public class TTClassLoader extends ClassLoader
{
public Class loadClass()
{ //读取license.lic文件
InputStream in = TTClassLoader.class.getResourceAsStream("/person.data");
//可以从文件中得到字节数据,也可以由C++动态库得到
byte[] content = readFile(in);
//defineClass由字节流在JVM中生成Class对象
return defineClass("com.Person", content, 0, content.length);
}
private static byte[] readFile(InputStream in) {
byte[] fileContents = (byte[])null;
int fileSize = 0;
try
{
byte[] buffer = new byte[512];
for (int bytesRead = in.read(buffer); bytesRead != -1; bytesRead = in.read(buffer))
{
byte[] newFileContents = new byte[fileSize + bytesRead];
if (fileSize > 0)
{
System.arraycopy(fileContents, 0, newFileContents, 0, fileSize);
}
System.arraycopy(buffer, 0, newFileContents, fileSize, bytesRead);
fileContents = newFileContents;
fileSize += bytesRead;
}
}
catch (IOException e)
{
e.printStackTrace();
}
//返回解密之后的文件内容
return encrypt(fileContents);
}
}
ByteArrayOutputStream baos = new ByteArrayOutputStream();
ObjectOutputStream oos = new ObjectOutputStream(baos);
oos.writeObject(FileContextCache.class);
byte[] data = baos.toByteArray();
int length = data.length;
System.out.println(data);
ByteArrayInputStream bais = new ByteArrayInputStream(data);
ObjectInputStream ois = new ObjectInputStream(bais);
Class d = (Class) ois.readObject();
System.out.println(d);
System.out.println(d);
FileContextCache dd = (FileContextCache)d.newInstance();
System.out.println(dd);
System.out.println(dd);
通过 上面的代码可以发现,可以从一个byte[]数组中实例化一个java对象。
所以这个byte[]可以由jni来由C语言动态库生成,然后在java中再实例化这个对象.
public class TTClassLoader extends ClassLoader
{
public Class loadClass()
{ //读取license.lic文件
InputStream in = TTClassLoader.class.getResourceAsStream("/person.data");
//可以从文件中得到字节数据,也可以由C++动态库得到
byte[] content = readFile(in);
//defineClass由字节流在JVM中生成Class对象
return defineClass("com.Person", content, 0, content.length);
}
private static byte[] readFile(InputStream in) {
byte[] fileContents = (byte[])null;
int fileSize = 0;
try
{
byte[] buffer = new byte[512];
for (int bytesRead = in.read(buffer); bytesRead != -1; bytesRead = in.read(buffer))
{
byte[] newFileContents = new byte[fileSize + bytesRead];
if (fileSize > 0)
{
System.arraycopy(fileContents, 0, newFileContents, 0, fileSize);
}
System.arraycopy(buffer, 0, newFileContents, fileSize, bytesRead);
fileContents = newFileContents;
fileSize += bytesRead;
}
}
catch (IOException e)
{
e.printStackTrace();
}
//返回解密之后的文件内容
return encrypt(fileContents);
}
}
发表评论
-
java相关命令
2014-11-24 09:18 5841:创建jar包,cd WEB-INF jar cvf bus ... -
API设计
2014-11-23 19:47 5631:为了在记录日志的时候打印对象的状态值描述信息。不要重写to ... -
login.jsp防止操作员重复登录
2014-10-11 09:30 681<% //IE8多个窗口使用一个session.如果当前 ... -
nested exception is java.lang.LinkageError: JAXB 2.0 API is being loaded fro
2014-10-10 09:08 5661:网上的解决办法: http://www.blogjava. ... -
jvm HotSpot client VM 与 server VM
2014-10-10 08:59 9111:默认值 JAVA_HOME\jre\lib\i386\jv ... -
转载 spring+atomikos+JTA完整例子
2014-09-28 09:04 650原文:http://www.blogjava.net/pdw2 ... -
jvm概念
2014-09-17 17:54 472原文件: http://blog.csdn.net/mahon ... -
JVM参数
2014-09-17 15:48 395原文:http://blog.csdn.net/cpz ... -
java压缩zip文件中文乱码问题
2014-09-16 16:17 13961:jar包 commons-compress-1.0.jar ... -
[转载]javaWeb提高并发数之二十三条
2014-09-11 09:24 585原文地址 http://blog.sina.com.cn/s/ ... -
jdom读取xml报错
2014-09-02 14:24 517报错信息是: org.jdom.input.JDOMParse ... -
JVM取机器日期少8个小时
2014-07-11 11:20 597new Date()获取当前时间的时候总是得到的是GMT的时间 ... -
BeanUtils与PropertyUtils
2014-07-04 15:12 345他们的copyProperties方法行为不太一样. --- ... -
java异常处理
2014-06-10 22:30 416如何处理异常。 看过很多的资料,现在我觉得。处理的太多也不好, ... -
如何取系统时间
2014-06-10 22:12 515当需要保存记录的时间时,可以考虑使用数据库服务器的时间,而不要 ... -
关于PO与VO转换.
2012-07-24 23:51 3316PO与数据库表对应,VO是与其它系统或其它层传输数据用。 例如 ...
相关推荐
对于复杂的对象,可能需要自定义序列化和反序列化逻辑。 5. **内存管理**: JNI操作Java对象时需要注意内存管理。创建的Java对象需要手动释放,否则可能导致内存泄漏。使用`env->DeleteLocalRef`释放不再使用的...
综上所述,Java Activity通过JNI与本地代码进行JSON数据交换涉及到序列化/反序列化、JNI接口定义、本地代码实现、错误处理和性能优化等多个环节。理解和熟练掌握这些步骤对于开发高效的Android应用至关重要。
因此,当我们想要在JNI中传递Java对象时,我们需要将对象转换为C/C++可以理解的数据类型,通常是通过序列化或使用JNI提供的特殊机制。 在"HelloWorld"这个简单的例子中,我们可能看到了以下步骤: 1. **定义Java类...
这种直接通过JNI读取触摸事件的方式可以避免Java层的序列化和反序列化开销,从而提高事件处理的效率。但是,需要注意的是,这可能需要对Linux内核事件机制和Android系统的输入系统有深入理解,且可能会引入额外的...
对于复杂的数据结构,可以创建一个缓冲区(如`jbyteArray`),然后通过JNI函数将Java对象的字节序列化到缓冲区,再在C/C++中解析这个字节序列。 3. **自定义序列化和反序列化** 自定义序列化函数将Java对象转换为...
Java对象的序列化是指将对象状态转换成可以存储或传输的形式的过程,而反序列化则是将这些形式重新转换为对象的过程。序列化可以通过Java的ObjectOutputStream类的writeObject()方法实现,相应的反序列化操作则通过...
对于更复杂的类型,如自定义结构体`DiskInfo`,需要进行序列化和反序列化的处理。例如,将Java的`DiskInfo`对象转换为C++的`DiskInfo`结构体,你需要创建一个Java对象到C++结构体的映射。在C++中,你可以创建一个...
主要包括Java编程基础知识、Java算术运算符、Java编程语法、面向对象程序设计基本概念、系统类的使用和应用、图形用户界面设计、图形处理、多媒体处理、异常处理、多线程、网络编程、输入输出处理与序列化、Java本机...
综上所述,Java语言的基础知识不仅涵盖了序列化与反序列化等核心概念,还包括了如何使用JNI来增强Java应用程序的能力,使之能够更好地集成本地代码,从而在必要时提升性能或利用特定于平台的功能。然而,在实际应用...
所有数据类型都必须是Android支持的序列化类型或者通过AIDL定义的自定义类型。 2. 接口中的方法声明类似于Java,但参数传递采用值传递方式,不支持引用传递。 3. 使用AIDL生成的Stub类会处理所有的跨进程通信细节,...
PStruct框架不仅处理单个对象的序列化和反序列化,还支持数组类型的序列化。这意味着开发者可以方便地处理包含数组的Java类和C结构体,这对于处理批量数据尤为方便。 3. **结构体嵌套** 在复杂的数据结构中,...
在IT行业中,序列化和反序列化是数据交换的关键过程,它们允许对象的状态转换为可以在网络上传输或存储在磁盘上的格式,然后再恢复为原来的对象。Ballerina SerDes,全称为Ballerina序列化器和反序列化器,是...
JNI(Java Native Interface)是...实际项目中,你可以根据需求修改这个例子,实现序列化、反序列化、修改JSON数据等操作。通过这种方式,你可以利用C++的性能优势来处理JSON数据,同时保持Java层的易读性和可维护性。
- 数据交换通常涉及对象的序列化和反序列化,Java 对象可以被序列化成字节流,然后在 C 端进行解析。 - 共享内存是另一种有效的方式,允许 Java 和 C 代码直接访问同一块内存区域,减少了数据复制的开销。 5. ...
- **Java的序列化**:Java提供了`java.io.Serializable`接口,实现了该接口的类的对象可以通过`ObjectOutputStream`进行序列化,然后通过Socket发送到另一端,通过`ObjectInputStream`反序列化。 - **C++的数据...
Java面试题涵盖了许多核心概念,包括垃圾回收机制、面向对象编程、访问修饰符、多态性、异常处理、线程管理、集合框架、反射机制、序列化与反序列化以及设计模式。以下是对这些概念的详细解释: 1. **垃圾回收机制*...
通过这些文件,开发者可以学习如何使用BridJ库来编写和调用本地方法,了解如何处理Java对象的序列化,查看被弃用的API以避免在代码中使用它们,以及导航复杂的类和接口层次结构。此外,文档还提供了错误排查和使用...
如果`TestJNI`类包含非基本类型字段,那么需要特别注意它们的序列化和反序列化。 3. **内存管理**:确保正确地分配和释放内存。JNI调用可能会涉及到创建和销毁Java对象,需要遵循JNI的内存管理规则,比如使用`...
4. **数据序列化与反序列化**:为了在两种语言之间传递对象,数据通常需要进行序列化和反序列化,如JSON、XML、protobuf等格式。 ### 使用说明 #### Java Bean 使用指南 在Java模块中,可以使用Tomcat服务器部署...