有没有办法在反序列化之前或之后从流中读取序列化对象的总使用大小?
我能找到的唯一方法是将它再次序列化到一个字节缓冲区中,然后查看该缓冲区的总占用大小。这行得通,但似乎是在浪费资源。
编辑:我对 Object 实例在内存中加载时使用的空间不感兴趣。仅以字节为单位的序列化大小。
有没有办法在反序列化之前或之后从流中读取序列化对象的总使用大小?
我能找到的唯一方法是将它再次序列化到一个字节缓冲区中,然后查看该缓冲区的总占用大小。这行得通,但似乎是在浪费资源。
编辑:我对 Object 实例在内存中加载时使用的空间不感兴趣。仅以字节为单位的序列化大小。
您将无法在反序列化之前确定大小,因为序列化协议不会浪费时间预先计算输出的大小;它只是处理对象直到完成。
要在反序列化后读取大小,您可以在您的流和底层流之间插入一个CountingInputStream 。ObjectInputStream
编辑:如果您绝对需要确定预序列化的大小,那么我想您可以序列化为 a ByteArrayOutputStream
,并将结果字节写入输出。但这需要发送者和接收者就如何处理字节达成一致。
序列化大小是其所有字段及其本身的总和。我假设你有一个检查对象大小的好方法,所以检查对象的大小,然后添加它的所有字段。