假设我使用标准 Java 对象序列化向内存缓冲区写入/读取小型(< 1K)Java 对象。最关键的部分是反序列化,即从内存缓冲区(字节数组)中读取Java对象。
对于这种情况,有没有比标准 Java 序列化更快的替代方法?
假设我使用标准 Java 对象序列化向内存缓冲区写入/读取小型(< 1K)Java 对象。最关键的部分是反序列化,即从内存缓冲区(字节数组)中读取Java对象。
对于这种情况,有没有比标准 Java 序列化更快的替代方法?
您可能还想看看FST。
还提供堆外读/写工具
标准序列化添加了大量类型信息,然后在反序列化对象时对其进行验证。当您知道要反序列化的对象的类型时,通常不需要这样做。
你可以做的是为每个类创建你自己的序列化方法,它只是将对象的所有值写入字节缓冲区,以及一个构造函数(或工厂方法,当你以这种方式摆动时)接受这样一个字节缓冲区和从中读取所有变量。
但就像 AlexR 一样,我想知道你是否真的需要它。序列化通常仅在数据离开程序时才需要(例如存储在磁盘上或通过网络发送到另一个程序)。
众所周知,Java 的标准序列化速度很慢,并且在磁盘上使用大量字节。进行自己的自定义序列化非常简单。
javas std 序列化非常适合演示项目,但由于上述原因不太适合专业项目。进一步的版本控制不在您的控制之下。
java 提供了自定义序列化所需的一切,请参阅我的帖子中的演示代码
使用这种方法,您甚至可以指定二进制文件格式,以便在 C 或 C# 中也可以读取它。另一个优点自定义设置对象需要的空间比主内存少(布尔值在主内存中需要 4 个字节,但自定义序列化时只需要 1 个字节(作为字节)
如果不同的项目合作伙伴必须读取您的序列化数据,谷歌的 Protobuf 是一个替代方案。