Java中的序列化和反序化
背景
比如我们在两台电脑上传输数据,A电脑构造了并且发送了一段数据,但是在传输过程中需要转化成bit流才可以发送过去,而B电脑接收这段数据后,需要让人看得懂,就需要把bit流转化成这种数据。
序列化和反序列化
- 把JAVA对象转化成字节序列的过程就被称为序列化。
- 把字节序列恢复成Java对象的过程就被称为反序列化。
什么时候需要使用序列化和反序列化
- 一般当我们需要将内存中的对象状态保存到数据库或者文件中的时候。
- 用套子节在网络上传输数据的时候。
简单的代码使用
package util;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import java.io.IOException;
import java.io.InputStream;
public class JSONUtil {
private static final ObjectMapper MAPPER = new ObjectMapper();
// 静态方法
/**
* JSON序列化 ,将Java对象序列化成JSON字符串
* @param o java对象
* @return json字符串
* */
public static String serialize (Object o) {
try {
return MAPPER.writeValueAsString(o);
} catch (JsonProcessingException e) {
e.printStackTrace();
throw new RuntimeException("json序列化失败" + o);
}
}
/**
* 反序列化 将JSON字符串转化成JAVA对象
* 使用泛型 来确定JAVA对象
* @param is 输入流
* @param tClass 确定要反序列化的类型
* @return 反序列化的对象
*/
public static <T> T deserialize (InputStream is, Class<T> tClass) {
try {
return MAPPER.readValue(is, tClass);
} catch (IOException e) {
e.printStackTrace();
throw new RuntimeException("json反序列化失败" + tClass.getName());
}
}
}
小节
其实网络原理中的五层模型中的协议就是一种序列化和反序列化,而序列化和反序列化的最大的作用其实就是为了传输数据,发送方将数据变成bit流再转变成光电信号传送给接受方,接受方然后再根据字节流和协议将其变成原有的数据,这也其实就是一种序列化和反序列化。