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

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

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

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

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)