如何读取Java中序列化对象的大小(以字节为单位)?

时间:2012-08-24 15:29:13

标签: java object serialization size

有没有办法在反序列化之前或之后从流中读取序列化对象的总使用大小?

我能找到的唯一方法是将其再次序列化为字节缓冲区并查看缓冲区总占用大小。这有效,但似乎是浪费资源。

编辑:我对Object实例在内存中加载时使用的空间不感兴趣。只有字节序列化大小。

2 个答案:

答案 0 :(得分:2)

在反序列化之前,您将无法确定大小,因为序列化协议不会浪费预先计算输出大小的时间;它只是处理对象直到它完成。

要在反序列化后读取大小,您可以在ObjectInputStream和基础流之间插入CountingInputStream

编辑:如果你绝对需要确定大小预序列化,那么我想你可以序列化为ByteArrayOutputStream,并将结果字节写入输出。但这需要发送方和接收方就如何处理字节达成一致。

答案 1 :(得分:-1)

序列化大小是所有字段和自身的总和。我假设你有一个很好的方法来检查对象的大小,所以检查对象的大小,然后添加到它的所有字段。