
大家好,非常高兴向大家发布 Apache Fury 0.9.0 版本。该版本包含了来自14个 contributor的34个PR的贡献,可以参考安装文档获取最新版本。
Release Notes:github.com/apache/fury…
Apache Fury简介
Apache Fury 是一个基于JIT动态编译和零拷贝的高性能多语言序列化框架,只Java/Python/JavaScript/Golang/Scala/C++等语言,提供最高170倍的性能和极致的易用性
项目github repo地址:github.com/apache/incu…
官网主页:fury.apache.org
如何安装
Fury Java 安装
要使用 Maven 添加对 Apache Fury 的依赖,请使用以下配置:
<dependency>
<groupId>org.apache.fury</groupId>
<artifactId>fury-core</artifactId>
<version>0.9.0</version>
</dependency>
Fury Scala 安装
要使用 Maven 添加 scala 2.13 的 Fury scala 依赖,请使用以下配置:
<dependency>
<groupId>org.apache.fury</groupId>
<artifactId>fury-scala_2.13</artifactId>
<version>0.9.0</version>
</dependency>
要使用 Maven 添加 scala 3 的 Fury scala 依赖,请使用以下配置:
<dependency>
<groupId>org.apache.fury</groupId>
<artifactId>fury-scala_3</artifactId>
<version>0.9.0</version>
</dependency>
要使用 sbt 添加 scala 2.13 的 Fury scala 依赖,请使用以下配置:
libraryDependencies += "org.apache.fury" % "fury-scala_2.13" % "0.9.0"
要使用 sbt 添加 scala 3 的 Fury scala 依赖,请使用以下配置:
libraryDependencies += "org.apache.fury" % "fury-scala_3" % "0.9.0"
Fury Kotlin安装
<dependency>
<groupId>org.apache.fury</groupId>
<artifactId>fury-kotlin</artifactId>
<version>0.9.0</version>
</dependency>
Highlight
- 正式发布Fury Kotlin支持,支持任意Kotlin对象高性能序列化
- 支持高效率的 UTF-8 字符串编码,比 JDK utf8 编码快 2 倍
- 对于长度小于16字节的小字符串,减少metastring hashcode 开销,空间大小优化7 bytes
- 支持在 Windows 平台上构建 Fury C++ 库
- 实现Quarkus Fury 扩展,支持在Quarkus Native Image里面使用Fury进行序列化github.com/quarkiverse…
使用示例
Fury Kotlin使用示例

import org.apache.fury.Fury
import org.apache.fury.ThreadSafeFury
import org.apache.fury.serializer.kotlin.KotlinSerializers
data class Person(val name: String, val id: Long, val github: String)
data class Point(val x : Int, val y : Int, val z : Int)
fun main(args: Array<String>) {
// 注意:以下 fury 初始化代码应只在全局范围内执行一次,
// 而不是在每次序列化时初始化。
val fury: ThreadSafeFury = Fury.builder().requireClassRegistration(true).buildThreadSafeFury()
KotlinSerializers.registerSerializers(fury)
fury.register(Person::class.java)
fury.register(Point::class.java)
val p = Person("Shawn Yang", 1, "https://github.com/chaokunyang")
println(fury.deserialize(fury.serialize(p)))
println(fury.deserialize(fury.serialize(Point(1, 2, 3))))
}
Quarkus Fury 扩展使用示例

安装依赖:
<dependency>
<groupId>io.quarkiverse.fury</groupId>
<artifactId>quarkus-fury</artifactId>
<version>0.1.0</version>
</dependency>
代码示例:
import java.util.List;
import java.util.Map;
import io.quarkiverse.fury.FurySerialization;
import jakarta.enterprise.context.ApplicationScoped;
import jakarta.inject.Inject;
import jakarta.ws.rs.GET;
import jakarta.ws.rs.Path;
import org.apache.fury.BaseFury;
@FurySerialization
record Foo(int f1, String f2, List<String> f3, Map<String, Long> f4) {
}
@Path("/fury")
@ApplicationScoped
public class FuryResources {
@Inject
BaseFury fury;
@GET
@Path("/record")
public Boolean testSerializeFooRecord() {
Foo foo1 = new Foo(10, "abc", List.of("str1", "str2"), Map.of("k1", 10L, "k2", 20L));
Foo foo2 = (Foo) fury.deserialize(fury.serialize(foo1));
return foo1.equals(foo2);
}
}
功能特性
- feat(kotlin): 引入标准库集合和测试的 kotlin 包 by @wywen github.com/apache/fury…
- feat(kotlin): 添加无符号基本类型支持 by @wywen github.com/apache/fury…
- feat(kotlin): 为数组和字符串添加无符号数组支持和测试 by @wywen github.com/apache/fury…
- feat(java): 重构字符串序列化和反序列化,增加高性能UTF8编码支持 by @HuangXingBo github.com/apache/fury…
- feat(java): 为 scala和kotlin提供线程安全的回调注册接口 by @chaokunyang github.com/apache/fury…
- feat(scala): 支持 scala Range/NumericRange序列化器 by @chaokunyang github.com/apache/fury…
- feat(java): 支持将枚举序列化为字符串 by @orisgarno github.com/apache/fury…
- feat(kotlin): 为 kotlin 标准库的内建类型添加测试和支持 by @wywen github.com/apache/fury…
- feat(java): 减少小字符串(<=16 字节)的 metastring hashcode 负载 by @chaokunyang github.com/apache/fury… 中
- feat(javascript): 为类型元数据层添加序列化和反序列化支持 by @Forchapeatl github.com/apache/fury…
- feat(bazel): 支持在 Windows 平台上构建 C++ 库 by @An-DJ github.com/apache/fury…
- feat(scala): 支持 scala native image构建 by @chaokunyang github.com/apache/fury…
- perf(python): 添加 python 基准测试套件 by @penguin-wwy github.com/apache/fury…
Bug修复
- fix(scala): 禁用sbt发布命令 by @pjfanning github.com/apache/fury…
- fix(java): 修复非公共嵌套类的异步编译开关 by @chaokunyang github.com/apache/fury…
- fix(java): 修复添加 fury 的线程安全问题 @chaokunyang by github.com/apache/fury…
- fix(other): 修复Feature Request模板 by @chaokunyang github.com/apache/fury…
- fix(java): 修复序列化枚举按名称模式中的 NonExistentEnum by @orisgarno github.com/apache/fury… 中
- fix(java): ThreadLocalFury 和 ThreadPoolFury 优先使用用户类加载器 by @Aliothmoon github.com/apache/fury… 中
- fix(java): 修复子容器的深拷贝 by @zhaommmmomo github.com/apache/fury…
- fix(java): 修复了latin1但不是 ascii 字符的 utf16 到 utf8 转换结果不正确的问题 by @HuangXingBo github.com/apache/fury…
- fix(python): 运行 pytest 时消除 PytestCollectionWarning by @penguin-wwy github.com/apache/fury…
其它改进
- chore(py314): 替换弃用的 pkgutil.find_loader by @effigies github.com/apache/fury…
- docs(guide): 修复包拼写错误 by @mandrean github.com/apache/fury… 中
- build(kotlin): 添加 ktfmt 并为库代码启用显式 API 模式 by @wywen github.com/apache/fury…
- build(deps): 升级 scala (2.13.15/3.3.4) by @pjfanning github.com/apache/fury…
- feat(rust): 添加 rust-analyzer 到工具链 by @caicancai github.com/apache/fury…
- chore(scala): 添加 scala 构建脚本 by @chaokunyang github.com/apache/fury…
- chore(kotlin): 为 fury kotlin 添加父 pom by @chaokunyang github.com/apache/fury…
- feat(java): 改进不使用小端格式的体系结构上的错误消息 by @apupier github.com/apache/fury…
新贡献者
- @An-DJ 在 github.com/apache/fury… 中进行了他们的首次贡献
- @wywen 在 github.com/apache/fury… 中进行了他们的首次贡献
- @effigies 在 github.com/apache/fury… 中进行了他们的首次贡献
- @HuangXingBo 在 github.com/apache/fury… 中进行了他们的首次贡献
- @orisgarno 在 github.com/apache/fury… 中进行了他们的首次贡献
- @mandrean 在 github.com/apache/fury… 中进行了他们的首次贡献
- @Aliothmoon 在 github.com/apache/fury… 中进行了他们的首次贡献
- @penguin-wwy 在 github.com/apache/fury… 中进行了他们的首次贡献
- @apupier 在 github.com/apache/fury… 中进行了他们的首次贡献
完整变更记录: github.com/apache/fury…
感谢
特别感谢为这次发布做出贡献的同学:@effigies @apupier @wywen @mandrean @HuangXingBo @pjfanning @chaokunyang @penguin-wwy @An-DJ @Forchapeatl @orisgarno @zhaommmmomo @caicancai @Aliothmoon