在我的应用程序中,我需要序列化自定义集合类型的数组:
IntList[] collections; // need to be serialized
由于我们使用的编码环境的性质,我不能依赖第三方或任何 Java 内置包来执行序列化,而必须自己执行这一切。
我能想到的最好方法是将其全部存储在一个大字节数组中,在序列化之前对每个元素的长度进行编码。
例如,对于如下所示的集合数组:
| 0 | (1, 6, 3, 7)
| 1 | (7, 2, 4, 6)
| 2 | ( 1 )
将被序列化为:
4 (length of collection at 0) followed by the elements
4 (length of collection at 1) followed by the elements
1 (length of collection at 2) followed by the elements
是否有更好的选项可以优化序列化所需的数据大小?
最佳答案
如果尺寸效率是目标,那么做两件事:
- 使用您的系统,先写入尺寸值,后跟实际值。
- 将结果输入 GZipOutputStream
比较两者,如果压缩版本较小(对于超过大约 100 个值左右,它会较小),那么您可以使用该版本。
当反序列化值时,您可以尝试解压缩流,如果它无效,则假设它不是开始的压缩版本(将解压缩放在 try/catch block 中,并将未压缩解码放在捕获侧)。
关于java - 在Java中序列化列表数组的最简单方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19718207/