跳到主要内容

Fury v0.3.0 发布

· 阅读需 5 分钟
杨朝坤
信息

该版本发布于 Fury 进入 Apache 孵化器之前,因此属于非 ASF 发布。

我很高兴宣布 Fury 0.3.0 版本发布。这个版本已支持 Scala 2/3 的完整对象序列化,包括 case/pojo/object/option/tuple/collection/enum 等类型。其中 case/pojo/object 与 Fury JIT 深度集成,Fury 会在运行时自动生成高性能序列化代码,因此在这类对象上的序列化速度非常快。

作者:chaokunyang

我很高兴宣布 Fury 0.3.0 版本发布。这个版本已支持 Scala 2/3 的完整对象序列化,包括 case/pojo/object/option/tuple/collection/enum 等类型。其中 case/pojo/object 与 Fury JIT 深度集成,Fury 会在运行时自动生成高性能序列化代码,因此在这类对象上的序列化速度非常快。

长期以来,Scala 序列化一直是个难题,最稳妥的方案通常只有 JDK serialization,但它速度慢、序列化体积也偏大。虽然也有 chill 这样的框架,但对 Scala 类型支持有限,性能上也有约束。现在借助 Fury Scala,你可以序列化几乎任意 Scala 对象,同时获得非常可观的性能表现。欢迎试用并反馈问题。

Scala 序列化指南

安装依赖:

libraryDependencies += "org.furyio" % "fury-core" % "0.3.0"

创建 Fury:

val fury = Fury.builder()
.withScalaOptimizationEnabled(true)
.requireClassRegistration(false)
.withRefTracking(true)
.build()

序列化 case 对象:

case class Person(github: String, age: Int, id: Long)
val p = Person("https://github.com/chaokunyang", 18, 1)
println(fury.deserialize(fury.serialize(p)))
println(fury.deserializeJavaObject(fury.serializeJavaObject(p)))

序列化单例对象:

object singleton {
}
val o1 = fury.deserialize(fury.serialize(singleton))
val o2 = fury.deserialize(fury.serialize(singleton))
println(o1 == o2)

序列化集合对象:

val seq = Seq(1,2)
val list = List("a", "b") val map = Map("a" -> 1, "b" -> 2)
println(fury.deserialize(fury.serialize(seq)))
println(fury.deserialize(fury.serialize(list)))
println(fury.deserialize(fury.serialize(map)))

序列化枚举:

enum Color { case Red, Green, Blue }
println(fury.deserialize(fury.serialize(Color.Green)))

亮点

  • [Scala] Support scala serialization: case/object/tuple/string/collection/enum/basic all supported
  • [Scala] Add scala user documentation
  • [Scala] add optimized scala singleton object serializer
  • [Java] Make java.io.Externalizable compatible with Java writeReplace/readResolve API
  • [Java] Integrate fury with dubbo https://github.com/apache/dubbo-spi-extensions/pull/226
  • [Java] support bytes string serialization for jdk8 with JDK17 runtime

缺陷修复

  • [Java] Allow for InputStream not reading entire length
  • [Java] Use ReflectionUtils.getCtrHandle() for non-public constructor in ExternalizableSerializer
  • [Java] fix jdk compatible serialization for inheritance

变更列表

新贡献者

完整更新日志https://github.com/alipay/fury/compare/v0.2.1...v0.3.0