Java中序列化列表数组的最简单方法
在我的应用程序中,我需要序列化自定义集合类型的数组:Java中序列化列表数组的最简单方法,java,android,serialization,Java,Android,Serialization,在我的应用程序中,我需要序列化自定义集合类型的数组: IntList[] collections; // need to be serialized 由于我们使用的编码环境的性质,我不能依靠第三方或任何Java内置包来完成序列化,而必须自己完成 我能想到的最好的方法是将其全部存储在一个大字节数组中,在序列化之前对每个元素的长度进行编码 例如,对于如下所示的集合数组: | 0 | (1, 6, 3, 7) | 1 | (7, 2, 4, 6) | 2 | ( 1 ) 将序列化为: 4 (
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
是否有更好的选项可以优化序列化所需的数据大小?如果大小效率是目标,那么请做两件事:
当反序列化值时,您可以尝试解压缩流,如果它无效,则只需假设它不是要开始的压缩版本(将解压缩放在try/catch块中,将未压缩解码放在catch端)。我看到两种可能的解决方案 1) 使用CSV样式,例如索引、SizeOffCollection、x1、x2、x3。。。数组中每个条目的换行符等 2) 这个想法不那么简单,但至少你会使用一种不是你编造的奇怪的格式。这不是一个好的做法 编写一个简单的JSON解析器。输出如下所示的内容
[
{
"index": 0,
"size": 4,
"values": [
1,
6,
3,
7
]
},
{
"index": 1,
"size": 4,
"values": [
7,
2,
4,
6
]
},
{
"index": 2,
"size": 1,
"values": [
1
]
}
]
还是要小心非规范化,不知道为什么在序列化中需要索引和大小?下定决心吧。你想要最简单的还是最小的?最小的尺寸是我们需要的解决方案我一定错过了什么?CSV的错误在于如下格式:索引、大小集合、x1、x2、x3。。。数组中每个条目的换行符等?你要的是人类可读的东西吗?当您列出所有元素时,为什么您需要对数据进行非规范化,是否确实需要添加长度?为什么您不能使用“内置包”?不会给您留下太多,甚至不会留下DataOutputStream。例如,为什么不能使用ObjectOutputStream?