Java本机序列化的替代品

Java本机序列化的替代品,java,serialization,Java,Serialization,如今,使用Java的本机序列化有点令人不快,但是否有一个序列化库可以逐个功能地等同于Java的本机序列化?我的意思是: 按优先级列出 能够序列化任何可序列化对象,而无需映射、IDL、模式等。 序列化为二进制格式 稳定/生产准备就绪 比Java的本机序列化更快 我知道这个问题的变体在StackOverflow上被问了好几次,但我找不到一个结论性的答案,所以我希望这次能得到一些好的结论性答案。你可以看看或。GPB稳定、快速,在C++中也是可用的。 我以前没有使用过Kryo,但有一些基准测试看起来不错

如今,使用Java的本机序列化有点令人不快,但是否有一个序列化库可以逐个功能地等同于Java的本机序列化?我的意思是:

按优先级列出

能够序列化任何可序列化对象,而无需映射、IDL、模式等。 序列化为二进制格式 稳定/生产准备就绪 比Java的本机序列化更快 我知道这个问题的变体在StackOverflow上被问了好几次,但我找不到一个结论性的答案,所以我希望这次能得到一些好的结论性答案。

你可以看看或。GPB稳定、快速,在C++中也是可用的。 我以前没有使用过Kryo,但有一些基准测试看起来不错。

你可以看看或。GPB稳定、快速,在C++中也是可用的。
我以前没有使用KRYO,但有一些基准看起来不错。

< P>如果你关心性能和生产率,你可以考虑。使用Babeland一个看起来像java接口的附加的SIDL文件,可以透明地调用java、C++、FORTRAN、Python等定义的函数,Java也可以调用。巴贝尔将在幕后处理序列化 此项目比较了一系列序列化技术的性能。注意:它列出了使用Java序列化最快的Externalizable

我将性能与更快的技术进行了比较,但它比Externalizable更难实现,除非您需要超低延迟,否则我不会推荐它

真正的问题是;要加快速度,需要付出多少努力?如果你想快速获胜,我想你会失望的。如果你愿意付出一些努力,你可以做出显著的改进


我希望首先使用Externalizable,因为您可以将几个关键类转换为现在占用大部分时间的类,并保持大多数类不变。i、 e.它可以让你两全其美。

这个项目比较了一系列序列化技术的性能。注意:它列出了使用Java序列化最快的Externalizable

我将性能与更快的技术进行了比较,但它比Externalizable更难实现,除非您需要超低延迟,否则我不会推荐它

真正的问题是;要加快速度,需要付出多少努力?如果你想快速获胜,我想你会失望的。如果你愿意付出一些努力,你可以做出显著的改进

我希望首先使用Externalizable,因为您可以将几个关键类转换为现在占用大部分时间的类,并保持大多数类不变。i、 它可以让你两全其美

非常接近你要找的东西。它支持所有JDK序列化特殊方法,因此您可以在不进行大量代码更改的情况下进行尝试


非常接近你要找的东西。它支持所有JDK序列化特殊方法,因此您可以在不进行大量代码更改的情况下进行尝试。

如果有任何人知道如何序列化任何非正常Java序列化的可序列化对象,我会非常惊讶,尽管……是的,我知道的唯一替代方法是JBoss序列化,但是希望在这篇文章中看到其他的。@Wasserman fast.serialization@github正是这样做的。如果有什么东西知道如何序列化任何可序列化的对象,而这些对象不是普通的Java序列化,我会非常惊讶,尽管……是的,我知道的唯一替代方法是JBoss序列化,但是希望能在这篇文章中看到其他内容。@Wasserman fast.serialization@github确实做到了这一点。关于Kryo,我并不确定,但是你不需要为原型缓冲区定义每个可序列化类的模式吗?如果你想找一个高性能的序列化,那么每个可序列化类的模式应该会更好,因为它不必在课堂上四处走动。GBP需要一个消息结构预定义,然后编译将其转换为java类。我不一定要寻找最快的方法,这就是为什么它在列表中为4。@Drew我们特别使用Kryo,因为它不需要任何预定义的架构,并且支持自定义序列化。非常好的图书馆。在此之前,我们出于类似的原因使用XStream XML,但Kryo具有更好的性能和二进制大小。对Kryo不太确定,但您不必为原型缓冲区定义每个可序列化类的模式吗?如果您寻求高性能序列化,每个可序列化类的模式应该工作得更好,因为

因为它不必在课堂上四处走动。GBP需要一个消息结构预定义,然后编译将其转换为java类。我不一定要寻找最快的方法,这就是为什么它在列表中为4。@Drew我们特别使用Kryo,因为它不需要任何预定义的架构,并且支持自定义序列化。非常好的图书馆。在此之前,我们出于类似的原因使用XStream XML,但Kryo有更好的性能和二进制大小,我认为Babel不符合要求1@Drew没错,我假设您的目标是调用本机函数。如果这些函数在sidl idl文件中公开,则可以通过传递相应的Java对象从Java调用它们。Babel在幕后处理粘合代码生成和序列化。我认为Babel不符合要求1@Drew没错,我假设您的目标是调用本机函数。如果这些函数在sidl idl文件中公开,则可以通过传递相应的Java对象从Java调用它们。Babel在幕后处理粘合代码的生成和序列化。我不是在寻找fastet方法本身。因为我不知道什么对象将提前序列化,所以很难优化一些类。我列出的需求是按优先级排列的,但这是需求的重要性。如果您没有关于哪些类可能需要序列化的信息,那么Java序列化可能是最佳选择。所有其他方法都需要优化特定的类。如果您正确地重用流,泛型序列化可以更好地与手动序列化相媲美。请参阅@R.Moeller,这取决于您的用例,但对于高度优化的序列化,您希望回收所有对象,而不是创建任何新对象,并获得大约100 ns的延迟。@Peter我实际上提供了您所指的基准;-protobuf前进到github工作台。请注意,Protobuf不支持循环检测/共享引用。所以它是一个树编码器而不是序列化程序。像FST fast serialization和Kryo这样的通用序列化程序与此非常接近。如果您有一系列不平凡的互连数据结构,那么通常最好使用功能齐全的快速序列化。如果它只是一个简单的交易或订单列表,你可能会喜欢10%,但很大程度上取决于数据。我不是在寻找fastet方法本身。因为我不知道什么对象将提前序列化,所以很难优化一些类。我列出的需求是按优先级排列的,但这是需求的重要性。如果您没有关于哪些类可能需要序列化的信息,那么Java序列化可能是最佳选择。所有其他方法都需要优化特定的类。如果您正确地重用流,泛型序列化可以更好地与手动序列化相媲美。请参阅@R.Moeller,这取决于您的用例,但对于高度优化的序列化,您希望回收所有对象,而不是创建任何新对象,并获得大约100 ns的延迟。@Peter我实际上提供了您所指的基准;-protobuf前进到github工作台。请注意,Protobuf不支持循环检测/共享引用。所以它是一个树编码器而不是序列化程序。像FST fast serialization和Kryo这样的通用序列化程序与此非常接近。如果您有一系列不平凡的互连数据结构,那么通常最好使用功能齐全的快速序列化。如果它只是一个简单的交易或订单列表,您可能会喜欢10%,但这在很大程度上取决于数据。.R.Moeller,可以使用FST将字符串转换为嵌套列表列表吗?例如,输入字符串是[[1.0,2.0],[5.0,3.0]],因此我将有一个列表,它包含两个嵌套列表,其中包含双精度。我可以通过Gson和Jackson实现这一点,但您的工具可能可以更快地实现这一点?@dimson-fst专注于通用序列化二进制文件json。还有kson很少有文档记录,但是这一个用于配置文件文本到对象~yaml样式,没有针对speedOk进行优化,thanx用于回答,我理解。R.Moeller,可以使用FST将字符串转换为嵌套列表列表吗?例如,输入字符串是[[1.0,2.0],[5.0,3.0]],因此我将有一个列表,它包含两个嵌套列表,其中包含双精度。我可以通过Gson和Jackson实现这一点,但您的工具可能可以更快地实现这一点?@dimson-fst专注于通用序列化二进制文件json。还有kson很少有文档记录,但是这一个用于配置文件文本到对象~yaml样式,没有针对speedOk进行优化,而thanx用于回答,我理解。