`

jni与序列化对象

    博客分类:
  • java
阅读更多
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);
  }



}

分享到:
评论

相关推荐

    jni操作list集合,来存储对象

    对于复杂的对象,可能需要自定义序列化和反序列化逻辑。 5. **内存管理**: JNI操作Java对象时需要注意内存管理。创建的Java对象需要手动释放,否则可能导致内存泄漏。使用`env->DeleteLocalRef`释放不再使用的...

    java传送json到jni,jni传送json到java

    综上所述,Java Activity通过JNI与本地代码进行JSON数据交换涉及到序列化/反序列化、JNI接口定义、本地代码实现、错误处理和性能优化等多个环节。理解和熟练掌握这些步骤对于开发高效的Android应用至关重要。

    android jni 传递对象的demo

    因此,当我们想要在JNI中传递Java对象时,我们需要将对象转换为C/C++可以理解的数据类型,通常是通过序列化或使用JNI提供的特殊机制。 在"HelloWorld"这个简单的例子中,我们可能看到了以下步骤: 1. **定义Java类...

    使用JNI读取安卓特定触摸设备事件

    这种直接通过JNI读取触摸事件的方式可以避免Java层的序列化和反序列化开销,从而提高事件处理的效率。但是,需要注意的是,这可能需要对Linux内核事件机制和Android系统的输入系统有深入理解,且可能会引入额外的...

    C_Java_Transfer.zip

    对于复杂的数据结构,可以创建一个缓冲区(如`jbyteArray`),然后通过JNI函数将Java对象的字节序列化到缓冲区,再在C/C++中解析这个字节序列。 3. **自定义序列化和反序列化** 自定义序列化函数将Java对象转换为...

    Java反序列化漏洞利用工具的实现.pdf

    Java对象的序列化是指将对象状态转换成可以存储或传输的形式的过程,而反序列化则是将这些形式重新转换为对象的过程。序列化可以通过Java的ObjectOutputStream类的writeObject()方法实现,相应的反序列化操作则通过...

    Jni中C++和Java的参数传递.pdf

    对于更复杂的类型,如自定义结构体`DiskInfo`,需要进行序列化和反序列化的处理。例如,将Java的`DiskInfo`对象转换为C++的`DiskInfo`结构体,你需要创建一个Java对象到C++结构体的映射。在C++中,你可以创建一个...

    vc++6.0 程序设计学与用教程

    主要包括Java编程基础知识、Java算术运算符、Java编程语法、面向对象程序设计基本概念、系统类的使用和应用、图形用户界面设计、图形处理、多媒体处理、异常处理、多线程、网络编程、输入输出处理与序列化、Java本机...

    Java语言基础知识

    综上所述,Java语言的基础知识不仅涵盖了序列化与反序列化等核心概念,还包括了如何使用JNI来增强Java应用程序的能力,使之能够更好地集成本地代码,从而在必要时提升性能或利用特定于平台的功能。然而,在实际应用...

    测试代码,AIDL、jni

    所有数据类型都必须是Android支持的序列化类型或者通过AIDL定义的自定义类型。 2. 接口中的方法声明类似于Java,但参数传递采用值传递方式,不支持引用传递。 3. 使用AIDL生成的Stub类会处理所有的跨进程通信细节,...

    PStruct:高性能字节序列化框架,用于java类与C语言结构体互转

    PStruct框架不仅处理单个对象的序列化和反序列化,还支持数组类型的序列化。这意味着开发者可以方便地处理包含数组的Java类和C结构体,这对于处理批量数据尤为方便。 3. **结构体嵌套** 在复杂的数据结构中,...

    module-ballerina-serdes:使用Proto3 Java API实现的Ballerina序列化器反序列化器

    在IT行业中,序列化和反序列化是数据交换的关键过程,它们允许对象的状态转换为可以在网络上传输或存储在磁盘上的格式,然后再恢复为原来的对象。Ballerina SerDes,全称为Ballerina序列化器和反序列化器,是...

    jniJsonCpp.rar

    JNI(Java Native Interface)是...实际项目中,你可以根据需求修改这个例子,实现序列化、反序列化、修改JSON数据等操作。通过这种方式,你可以利用C++的性能优势来处理JSON数据,同时保持Java层的易读性和可维护性。

    Java与C语言混合开发技术

    - 数据交换通常涉及对象的序列化和反序列化,Java 对象可以被序列化成字节流,然后在 C 端进行解析。 - 共享内存是另一种有效的方式,允许 Java 和 C 代码直接访问同一块内存区域,减少了数据复制的开销。 5. ...

    java和C++通信结构体发送

    - **Java的序列化**:Java提供了`java.io.Serializable`接口,实现了该接口的类的对象可以通过`ObjectOutputStream`进行序列化,然后通过Socket发送到另一端,通过`ObjectInputStream`反序列化。 - **C++的数据...

    Java面试题+Java后端中级面试题

    Java面试题涵盖了许多核心概念,包括垃圾回收机制、面向对象编程、访问修饰符、多态性、异常处理、线程管理、集合框架、反射机制、序列化与反序列化以及设计模式。以下是对这些概念的详细解释: 1. **垃圾回收机制*...

    bridj-0.6.2-javadoc_java_源码

    通过这些文件,开发者可以学习如何使用BridJ库来编写和调用本地方法,了解如何处理Java对象的序列化,查看被弃用的API以避免在代码中使用它们,以及导航复杂的类和接口层次结构。此外,文档还提供了错误排查和使用...

    基于jni调用时,jvm报错问题的深入分析

    如果`TestJNI`类包含非基本类型字段,那么需要特别注意它们的序列化和反序列化。 3. **内存管理**:确保正确地分配和释放内存。JNI调用可能会涉及到创建和销毁Java对象,需要遵循JNI的内存管理规则,比如使用`...

    Java模块与C网关通信

    4. **数据序列化与反序列化**:为了在两种语言之间传递对象,数据通常需要进行序列化和反序列化,如JSON、XML、protobuf等格式。 ### 使用说明 #### Java Bean 使用指南 在Java模块中,可以使用Tomcat服务器部署...

Global site tag (gtag.js) - Google Analytics