[ Web Proxy ]
URL:
Viewing: https://raw.githubusercontent.com/xinrun0928/JavaGuide/main/docs/java/basis/serialization.md [Back]  [Original]

--- title: Java category: Java tag: - Java --- ## ### ?? Java Java Java - **** - **** Java Object(Class) C++struct() class > ****serializationmarshallingdeserializationunmarshalling **** ![](https://my-blog-to-use.oss-cn-beijing.aliyuncs.com/2020-8/a478c74d-2c48-40ae-9374-87aacf05188c.png)

https://www.corejavaguru.com/java/serialization/interview-questions-1

### 1. RPC 2. 3. Redis ### TCP/IP 4 TCP/IP 1. 2. 3. 4. ![TCP/IP 4](https://my-blog-to-use.oss-cn-beijing.aliyuncs.com/2020-8/6ecb84cd-4227-4c7b-a2e8-b77054604400-20200802201216504.png) OSI OSI TCP/IP TCP/IP ## JDK hessiankyroprotostuff JSON XML JSON XML ### JDK JDK `java.io.Serializable` ```java @AllArgsConstructor @NoArgsConstructor @Getter @Builder @ToString public class RpcRequest implements Serializable { private static final long serialVersionUID = 1905122041950251207L; private String requestId; private String interfaceName; private String methodName; private Object[] parameters; private Class[] paramTypes; private RpcMessageTypeEnum rpcMessageTypeEnum; } ``` > serialVersionUID serialVersionUID serialVersionUID serialVersionUID serialVersionUID `InvalidClassException` `serialVersionUID` 1. **** : 2. **** ### Kryo Kryo / Kryo TwitterGrouponYahoo HiveStorm [guide-rpc-framework](https://github.com/Snailclimb/guide-rpc-framework) kyro ```java /** * Kryo serialization class, Kryo serialization efficiency is very high, but only compatible with Java language * * @author shuang.kou * @createTime 20200513 19:29:00 */ @Slf4j public class KryoSerializer implements Serializer { /** * Because Kryo is not thread safe. So, use ThreadLocal to store Kryo objects */ private final ThreadLocal kryoThreadLocal = ThreadLocal.withInitial(() -> { Kryo kryo = new Kryo(); kryo.register(RpcResponse.class); kryo.register(RpcRequest.class); return kryo; }); @Override public byte[] serialize(Object obj) { try (ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream(); Output output = new Output(byteArrayOutputStream)) { Kryo kryo = kryoThreadLocal.get(); // Object->byte:byte kryo.writeObject(output, obj); kryoThreadLocal.remove(); return output.toBytes(); } catch (Exception e) { throw new SerializeException("Serialization failed"); } } @Override public T deserialize(byte[] bytes, Class clazz) { try (ByteArrayInputStream byteArrayInputStream = new ByteArrayInputStream(bytes); Input input = new Input(byteArrayInputStream)) { Kryo kryo = kryoThreadLocal.get(); // byte->Object:byte Object o = kryo.readObject(input, clazz); kryoThreadLocal.remove(); return clazz.cast(o); } catch (Exception e) { throw new SerializeException("Deserialization failed"); } } } ``` Github [https://github.com/EsotericSoftware/kryo](https://github.com/EsotericSoftware/kryo) ### Protobuf Protobuf Google IDL protobuf > Protobuf IDL proto IDL proto ```protobuf // protobuf syntax = "proto3"; // SearchRequestJavaclassGostruct message Person { //string string name = 1; // int int32 age = 2; } ``` Github [https://github.com/protocolbuffers/protobuf](https://github.com/protocolbuffers/protobuf) ### ProtoStuff Protobuf Protostuff protostuff Google protobuf ProtoStuff Github [https://github.com/protostuff/protostuff](https://github.com/protostuff/protostuff) ### hessian hessian , RPC hessian ![](https://my-blog-to-use.oss-cn-beijing.aliyuncs.com/2020-8/8613ec4c-bde5-47bf-897e-99e0f90b9fa3.png) dubbo RPC hessian2 ,Dubbo hessian2 ### Kryo Java Java Dubbo Kryo ([https://dubbo.apache.org/zh/docs/v2.7/user/references/protocol/rest/](https://dubbo.apache.org/zh/docs/v2.7/user/references/protocol/rest/)) ![](https://my-blog-to-use.oss-cn-beijing.aliyuncs.com/2020-8/569e541a-22b2-4846-aa07-0ad479f07440.png) Protobuf ProtoStuffhessian ThriftAvro ## - -[https://tech.meituan.com/2015/02/26/serialization-vs-deserialization.html](https://tech.meituan.com/2015/02/26/serialization-vs-deserialization.html) - Dubbo Java Kryo FST: [https://dubbo.apache.org/zh-cn/docs/user/serialization.html](https://dubbo.apache.org/zh-cn/docs/user/serialization.html)
Web Proxy Viewer  |  New URL  |  Original Page