【发布时间】:2016-05-14 22:59:15
【问题描述】:
我在这里尝试了代码 (Java Serializable Object to Byte Array) 和 SerializationUtils.serialize(),但是当我序列化一个对象时,我总是得到比对象中存储的字节数更多的字节。
例如,当我执行 SerializationUtils.serialize(new byte[1]) 时,我可以得到一个长度为 28 的输出字节数组,而输入对象有 1 个字节。同样,如果我有类似的课程
public class MyClass {
public byte[] a;
public MyClass(byte[] a) {
this.a = a;
}
}
我创建了一个对象
MyClass obj = new MyClass(new byte[1]);
当我做 SerializationUtils.serialize(obj) 时,我会得到一个比 1 长得多的输出字节数组。
我在我的程序中真正做的是我在两方之间发送对象数组,所以我想首先将这个对象数组序列化为一个单字节数组,然后发送它。但是 SerializationUtils.serialize(MyClass[] obj) 会输出一个比 obj 实际存储的字节多得多的数组,这增加了我的通信带宽。
我还尝试通过自己的内存复制从对象数组创建单字节数组:
MyClass[] obj = new MyClass[5];
for (int i=0; i<5; i++)
obj[i] = new MyClass(new byte[1]);
byte[] msg = new byte[5];
for (int i=0; i<obj.length; i++)
System.arraycopy(obj[i].a, 0, msg, i, 1);
但这似乎不如 SerializationUtils.serialize(MyClass[] obj) 有效,即使通过 SerializationUtils.serialize(MyClass[] obj) 会生成比我拥有的 msg 更多的字节。
那么在 Java 中是否有某种方法可以有效地序列化对象/对象数组并使输出字节数组尽可能短?
提前致谢。
【问题讨论】:
标签: java serialization