序列化 - C++和Java之间的差异

imr*_*ole 5 c++ java serialization

我最近一直在运行一些基准测试,试图找到C++和Java的"最佳"序列化框架.对我来说构成"最佳"的因素是de/serializing的速度以及序列化对象的最终大小.

如果我查看Java中各种框架的结果,我会看到结果byte []通常小于内存中的对象大小.内置的Java序列化甚至都是这种情况.如果你再看一些其他产品(protobuf等),尺寸会更大.

我很惊讶当我在C++大小(boost,protobuf)上查看结果时,生成的对象通常不比原始对象小(在某些情况下更大).

我在这里错过了什么吗?为什么我在Java中免费获得了相当数量的"压缩",而在C++中却没有?

nb用于测量Java中对象的大小,我正在使用Instrumentation http://docs.oracle.com/javase/6/docs/api/java/lang/instrument/Instrumentation.html

Dev*_*lus 3

您比较了数据的绝对大小吗?我想说Java有更多的开销,所以如果你将数据“压缩”到序列化缓冲区中,开销会减少很多。在 C/C++ 中,物理数据大小几乎满足最低要求,因此没有太多压缩空间。事实上,您必须添加额外的信息来反序列化它,这甚至可能导致增长。