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

是否有更好的选项可以优化序列化所需的数据大小?

如果大小效率是目标,那么请做两件事:

  • 使用在实际值之后写入大小值的系统
  • 将结果输入到
  • 比较两者,如果压缩版本更小(超过100个左右的值),则可以使用该版本


    当反序列化值时,您可以尝试解压缩流,如果它无效,则只需假设它不是要开始的压缩版本(将解压缩放在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?