8

我正在开发一个 Java 的本机序列化速度很慢的项目,因此我们希望转向在类上实现 Externalize 接口以获得卓越的性能。

但是,这些类有很多数据成员,我们已经意识到在编写这两个方法时很容易出错。我们只是在这些函数中读取/写入类的所有成员,没什么特别的。是否有某种方法readExternal() writeExternal()可以在离线过程中或在编译时自动生成用于外部化的块?

我看了一下http://projectlombok.org/,类似的东西会很理想。

同样,我们希望保持这些类不可变,但不可变类不能实现可外部化接口——我们想使用有效 java 中的代理类模式——生成该类也很有用。

4

2 回答 2

1

我正在开发一个 Java 的本机序列化速度很慢的项目

有多慢?为什么?从长远来看,通过大量手工编码使其速度更快是最不可能经济可行或可维护的。序列化开销应该真正归结为传输中的时间和空间限制。没有什么特别的原因说明 Java 的默认序列化应该比您计划的所有手动编码的结果慢得多。你最好调查原因。例如,您可能会发现放置良好的 BufferedOutputStream 可以解决您的所有问题。

于 2011-08-17T08:25:30.737 回答
0

关于 Project Lombok ,它拒绝了该功能

我会考虑利用替代框架:

  • SBE - 用于金融交易;
  • kryo 项目- 用于 Java 兼容性;
  • FlatBuffers - 用于惰性零复制解析和跳过嵌套结构的能力;
  • Protobuf - 比平面缓冲区更紧凑,但在随机访问区域中缺少解析(可能在平面缓冲区中,例如在内存映射文件上)。

Java 序列化在吞吐量、大小、可移植性和模式迁移方面都非常低效。

MapStruct - 如果需要最少的自定义代码(和 IDE 支持),将可变的东西映射到不可变的东西是一个不错的选择。

于 2021-06-25T05:10:28.967 回答