gpt4 book ai didi

java - 为什么序列化 Integer 需要这么多(81)个字节?

转载 作者:行者123 更新时间:2023-11-29 03:20:09 25 4
gpt4 key购买 nike

我写了一个小测试程序来显示我们需要多少字节来序列化 Integer 对象:

    ByteArrayOutputStream data = new ByteArrayOutputStream();
try {
ObjectOutputStream output = new ObjectOutputStream(data);
output.writeObject(1);
output.flush();
System.out.println(data.toByteArray().length);
} catch (IOException e) {
e.printStackTrace();
}

然而,结果却让人大吃一惊,居然占用了81个字节。如果我序列化 String“1”,它只占用 8 个字节。我知道 java 对 String 序列化进行了优化,但为什么不对 Integer 做同样的事情呢?我认为这应该不是很困难。

或者有人有解决方法吗?我需要一种可以序列化所有内容的方法,包括对象和基本类型。感谢您的回答!

最佳答案

这是一种平衡行为,既可以通过直接支持大量类型来使序列化协议(protocol)变得更加复杂,也可以保持其简单。

根据我的经验,与 int 值相比,Integer 值相对较少 - 后者确实具有内置支持,以及所有其他原始类型。还值得注意的是,虽然序列化一个单个 Integer 对象很昂贵,但增量成本要小得多,因为流中已经有对该类的引用。所以在第一个 Integer 被写入后,一个新的 Integer 只需要 10 个字节 - 以及对已经写入的 Integer 的引用流(如果您要装箱小值则很常见)只有 5 个字节。

就我个人而言,无论如何我都会尽量避免 native Java 二进制序列化 - 它是特定于平台的并且非常脆弱,而且不是非常紧凑。我喜欢Protocol Buffers但也有许多其他替代方案可用。

关于java - 为什么序列化 Integer 需要这么多(81)个字节?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24178383/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com