在我的应用程序中,我需要序列化自定义集合类型的数组:
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
是否有更好的选项可以优化序列化所需的数据大小?
答案 0 :(得分:1)
如果规模效率是目标,那么做两件事:
比较两者,如果压缩版本较小(超过约100个值,或者它会更小),那么你可以使用该版本。
当反序列化值时,您可以尝试解压缩流,如果它无效,那么只是假设它不是压缩版本的开头(将解压缩放在try / catch块中,并将未解压缩的解码放入抓住一边)。
答案 1 :(得分:1)
我看到两种可能的解决方案......
1)对数组中的每个条目使用CSV样式,如index,sizeOfCollection,x1,x2,x3 ... newline等。
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
]
}
]
再次警惕非规范化,不确定为什么在序列化中确实需要索引和大小?