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

--- title: Java category: Java tag: - Java --- ## ? Java Java Java - **** - **** Java Object(Class) C++struct() class - RPC - - Redis - > ****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

** TCP/IP 4 ** TCP/IP 1. 2. 3. 4. ![TCP/IP ](https://guide-blog-images.oss-cn-shenzhen.aliyuncs.com/github/javaguide/cs-basics/network/tcp-ip-4-model.png) OSI OSI TCP/IP TCP/IP ## JDK HessianKryoProtobufProtoStuff 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` `serialVersionUID` **serialVersionUID static ** `static` `static` `static` `static` **** `transient` `transient` `transient` `transient` - `transient` - `transient` `int` `0` - `static` (Object) `transient` ** JDK ** JDK - **** : - **** - **** [:JAVA - Cryin](https://cryin.github.io/blog/secure-development-java-deserialization-vulnerability/) [Java? - Monica](https://www.zhihu.com/question/37562657/answer/1916596031) ### Kryo Kryo / Kryo TwitterGrouponYahoo HiveStorm [guide-rpc-framework](https://github.com/Snailclimb/guide-rpc-framework) kryo ```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) Dubbo2.x 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
Web Proxy Viewer  |  New URL  |  Original Page