= None@dataclassclass SomeClass1: f1: Any f2: Dict[pyfury.Int8Type pyfury.Int32Type
if __name__ == \"__main__\": fury_ = pyfury.Fury(reference_tracking=False) fury_.register_class(SomeClass1 \"example.SomeClass1\") fury_.register_class(SomeClass2 \"example.SomeClass2\") obj2 = SomeClass2(f1=True f2={-1: 2) obj1 = SomeClass1( f1=obj2 f2=\"abc\" f3=[\"abc\" \"abc\"
f4={1: 2 f5=2 ** 7 - 1 f6=2 ** 15 - 1 f7=2 ** 31 - 1 f8=2 ** 63 - 1 f9=1.0 / 2 f10=1 / 3.0 f11=array.array(\"h\" [1 2
) f12=[-1 4
) data = https://mparticle.uc.cn/api/fury_.serialize(obj) # bytes can be data serialized by other languages. print(fury_.deserialize(data)) GoLang序列化示例
package mainimport \"code.alipay.com/ray-project/fury/go/fury\"import \"fmt\"func main() { type SomeClass1 struct { F1 interface{ F2 string F3 [
interface{ F4 map[int8
int32 F5 int8 F6 int16 F7 int32 F8 int64 F9 float32 F10 float64 F11 [
int16 F12 fury.Int16Slicetype SomeClas2 struct { F1 interface{ F2 map[int8
int32fury_ := fury.NewFury(false) if err := fury_.RegisterTagType(\"example.SomeClass1\" SomeClass1{); err != nil { panic(err)if err := fury_.RegisterTagType(\"example.SomeClass2\" SomeClass2{); err != nil { panic(err)obj2 :=SomeClass2{ obj2.F1 = true obj2.F2 = map[int8
int32{-1: 2 obj :=SomeClass1{ obj.F1 = obj2 obj.F2 = \"abc\" obj.F3 = [
interface{{\"abc\" \"abc\" f4 := map[int8
int32{1: 2 obj.F4 = f4 obj.F5 = fury.MaxInt8 obj.F6 = fury.MaxInt16 obj.F7 = fury.MaxInt32 obj.F8 = fury.MaxInt64 obj.F9 = 1.0 / 2 obj.F10 = 1 / 3.0 obj.F11 = [
int16{1 2 obj.F12 = [
int16{-1 4 bytes err := fury_.Marshal(value) if err != nil {var newValue interface{ // bytes can be data serialized by other languages. if err := fury_.Unmarshal(bytesnewValue); err != nil { panic(err)fmt.Println(newValue) 序列化共享循环引用
共享引用和循环引用是程序里面常见的构造 , 很多数据结构如图都包含大量的循环引用 , 而手动实现这些包含共享引用和循环引用的对象 , 需要大量冗长复杂易出错的代码 。 跨语言序列化框架支持循环引用可以极大简化这些复杂场景的序列化 , 加速业务迭代效率 。 下面是一个包含循环引用的自定义类型跨语言序列化示例 。
Java序列化示例
import com.google.common.collect.ImmutableMap;import io.fury.*;import java.util.Map;public class ReferenceExample { public static class SomeClass { SomeClass f1; MapString Stringf2; MapString Stringf3;public static Object createObject() { SomeClass obj = new SomeClass(); obj.f1 = obj; obj.f2 = ImmutableMap.of(\"k1\" \"v1\" \"k2\" \"v2\"); obj.f3 = obj.f2; return obj;Java序列化:
public class ReferenceExample { // mvn exec:java -Dexec.mainClass=\"io.fury.examples.ReferenceExample\" public static void main(String[
args) { // Fury应该在多个对象序列化之间复用 , 不要每次创建新的Fury实例 Fury fury = Fury.builder().withLanguage(Language.JAVA) .withReferenceTracking(true) .withClassRegistrationRequired(false) .build(); byte[
bytes = fury.serialize(createObject()); System.out.println(fury.deserialize(bytes));;跨语言序列化:
public class ReferenceExample { // mvn exec:java -Dexec.mainClass=\"io.fury.examples.ReferenceExample\" public static void main(String[
args) { // Fury应该在多个对象序列化之间复用 , 不要每次创建新的Fury实例 Fury fury = Fury.builder().withLanguage(Language.XLANG) .withReferenceTracking(true).build(); fury.register(SomeClass.class \"example.SomeClass\"); byte[
bytes = fury.serialize(createObject()); // bytes can be data serialized by other languages. System.out.println(fury.deserialize(bytes));;Python序列化示例
from typing import Dictimport pyfuryclass SomeClass: f1: \"SomeClass\" f2: Dict[str str
f3: Dict[str str
if __name__ == \"__main__\": fury_ = pyfury.Fury(reference_tracking=True) fury_.register_class(SomeClass \"example.SomeClass\") obj = SomeClass() obj.f2 = {\"k1\": \"v1\" \"k2\": \"v2\" obj.f1 obj.f3 = obj obj.f2 data = https://mparticle.uc.cn/api/fury_.serialize(obj) # bytes can be data serialized by other languages. print(fury_.deserialize(data)) Golang序列化示例
- 百度|“萝卜快跑”无人车出车祸 后轮被撞掉!官方回应:后车追尾
- 作为国内高新技术企业、两轮绿色能源网络布局的先行者|易马达重磅推出新国标智能换电车
- 百度|百度“萝卜快跑”无人车出车祸 后轮被撞掉
- 天使轮|36氪独家 | 天使轮红杉、云九、StarVC、高瓴同投,「光线云」再获前海基金Pre-A轮投资,全球首款云原生实时渲染引擎
- 3D打印|成立1年完成3轮融资,这家中国食品3D打印公司,为什么这么吃香?
- 阿斯麦尔|风水轮流转!ASML就我国发声,外媒:可以用EUV光刻机换
- 童文红|李楠这下放心了?怒喵科技获千万融资:投资方为联想创投
- 折叠屏|新一轮名单出炉,华为Harmony OS 3.0尝鲜版,新增17款设备可搭载
- 百度|派学车融资、YY学车倒闭,互联网驾培旱涝两重天
- 本文转自:人民网-湖南频道滑移装载机后轮悬空。|湖南长沙:聚焦工程机械 擦亮“智造之城”名片