---
title: Java
category: Java
tag:
- Java
---
## ?
Java Java Java
- ****
- ****
Java Object(Class) C++struct() class
- RPC
-
- Redis
-
> ****serializationmarshallingdeserializationunmarshalling
****

https://www.corejavaguru.com/java/serialization/interview-questions-1
** TCP/IP 4 **
TCP/IP
1.
2.
3.
4.

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

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/))

Protobuf ProtoStuffhessian
ThriftAvro