java - 在Java中序列化列表数组的最简单方法

标签 java android serialization

在我的应用程序中,我需要序列化自定义集合类型的数组:

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

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

最佳答案

如果尺寸效率是目标,那么做两件事:

  1. 使用您的系统,先写入尺寸值,后跟实际值。
  2. 将结果输入 GZipOutputStream

比较两者,如果压缩版本较小(对于超过大约 100 个值左右,它会较小),那么您可以使用该版本。

当反序列化值时,您可以尝试解压缩流,如果它无效,则假设它不是开始的压缩版本(将解压缩放在 try/catch block 中,并将未压缩解码放在捕获侧)。

关于java - 在Java中序列化列表数组的最简单方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19718207/

相关文章:

java - android.database.sqlite.SQLiteException : near ";": syntax error (code 1)

java - 复制 joda LocalTime 的直接方法是什么?

java - 重复写入 ObjectInputStream

serialization - 如何在go中序列化/反序列化 map

java - 启动 Activity Android 时出现致命异常

java - 线程ID=1 : thread exiting with uncaught exception error

java - 排序时如何忽略第一个单词

android - java.lang.UnsatisfiedLinkError : JNI_ERR returned from JNI_OnLoad

c# - 使用 Mongo C# 驱动程序序列化不可变值类型

java - Liquibase 看不到实体的变化