Java实现几种序列化方式总结
什么是序列化
序列化是将对象转换为字节流的过程,目的是为了在网络上传输或者将对象转存储到硬盘等介质中。
Java中的序列化
在Java中,实现序列化需要满足两个条件:一是实现Serializable
接口,二是定义一个静态的序列化ID,例如:
import java.io.Serializable;
public class Person implements Serializable {
private static final long serialVersionUID = 1234567890L;
private String name;
private int age;
// 省略getter和setter
}
Java中几种序列化方式
Java自带的序列化方式
Java自带的序列化方式是将对象转换为二进制格式进行传输。其优点是使用简单,只需实现Serializable
接口即可,但是它的缺点也比较明显:
- 序列化后的数据占用的空间比较大。
- 序列化后的数据对于人类阅读不友好,也不利于调试。
下面是示例代码:
import java.io.*;
public class JavaSerializerUtil {
public static <T> byte[] serialize(T object) throws IOException {
ByteArrayOutputStream baos = new ByteArrayOutputStream();
ObjectOutputStream oos = new ObjectOutputStream(baos);
oos.writeObject(object);
oos.flush();
byte[] bytes = baos.toByteArray();
baos.close();
oos.close();
return bytes;
}
public static <T> T deserialize(byte[] bytes) throws IOException, ClassNotFoundException {
ByteArrayInputStream bais = new ByteArrayInputStream(bytes);
ObjectInputStream ois = new ObjectInputStream(bais);
T object = (T) ois.readObject();
bais.close();
ois.close();
return object;
}
}
JSON序列化方式
JSON序列化方式是将对象转换为JSON格式进行传输。其优点是数据占用的空间比较小,对于人类阅读友好,也比较利于调试。但是它的缺点是需要引入相关的库进行序列化和反序列化。
下面是示例代码:
import com.fasterxml.jackson.databind.ObjectMapper;
import java.io.IOException;
public class JsonSerializerUtil {
private static final ObjectMapper objectMapper = new ObjectMapper();
public static <T> byte[] serialize(T object) throws IOException {
return objectMapper.writeValueAsBytes(object);
}
public static <T> T deserialize(byte[] bytes, Class<T> clazz) throws IOException {
return objectMapper.readValue(bytes, clazz);
}
}
CSV序列化方式
CSV序列化方式是将对象转换为CSV格式进行传输。其优点是数据占用的空间很小,可以使用Excel等软件进行查看和分析。但是它的缺点是对于复杂类型的序列化和反序列化比较困难。
下面是示例代码:
import com.opencsv.CSVWriter;
import java.io.IOException;
import java.io.StringWriter;
public class CsvSerializerUtil {
public static String serialize(Person person) throws IOException {
StringWriter out = new StringWriter();
CSVWriter writer = new CSVWriter(out);
String[] line = {person.getName(), String.valueOf(person.getAge())};
writer.writeNext(line);
writer.close();
return out.toString();
}
public static Person deserialize(String csv) throws IOException {
String[] line = csv.split(",");
Person person = new Person();
person.setName(line[0]);
person.setAge(Integer.parseInt(line[1]));
return person;
}
}
总结
以上就是Java中几种常用的序列化方式,在选择序列化方式的时候需要根据业务需求进行选择。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Java实现几种序列化方式总结 - Python技术站