Java本机序列化的替换

时间:2012-03-05 05:35:00

标签: java serialization

目前使用Java的本机序列化有点令人不悦,但是有一个序列化库的功能与Java的本机序列化相同吗?我的意思是:

(按优先级列出)

  1. 能够序列化任何(可序列化)对象(无需映射,IDL,架构等)。
  2. 序列化为二进制格式
  3. 保持稳定/生产
  4. 比Java的Native Serialization更快
  5. 我知道在StackOverflow上已经多次询问过这个问题的变体,但是我找不到确定的答案,所以我希望这次得到一些很好的答案。

4 个答案:

答案 0 :(得分:5)

您可以查看Google Proto BufferKryo。 GPB稳定且速度非常快,它也可以在C ++中使用。 我之前没有使用Kryo,但有一些基准看起来不错。

答案 1 :(得分:2)

https://github.com/RuedigerMoeller/fast-serialization

非常接近您所寻找的。它支持所有JDK-Serialization特殊方法,因此您可以在不进行大量代码更改的情况下进行尝试。

答案 2 :(得分:0)

如果您担心效果和效率,可以考虑Babel。使用Babel和一个额外的sidl文件(看起来像Java接口),您可以透明地从Java调用C,C ++,Fortran,Python等定义的函数,反之亦然。 Babel将在幕后处理序列化。

答案 3 :(得分:0)

该项目比较了一系列序列化技术的性能。注意:它列出了Externalizable(使用Java Serialization)作为最快的

http://code.google.com/p/thrift-protobuf-compare/wiki/Benchmarking

我使用更快的技术进行了性能比较,但是比Externalizable更难做到,除非你需要超低延迟,否则我不会推荐它。

http://vanillajava.blogspot.com/2011/10/serialization-using-bytebuffer-and.html

真正的问题是;为了加快速度,值多少钱?如果你正在寻找一个快速的胜利,我怀疑你会失望。如果你愿意付出一些努力,你可以做出重大改进。

我想首先使用Externalizable,因为你可以转换几个关键类(现在大部分时间都需要),并保留大部分类不变。即它可以让你充分利用这两个世界。