1.为什么要实现序列化?
知识背景:
在计算机中,网络传输有两种方式,第一种是字节流,第二种是字符流。字符或中文都是以二进制的形式进行网络传输或者保存在计算机的磁盘中,在很多地方都需要使用网络传输,比如将用户信息保存在本地磁盘中,比如两个服务之间通过RPC调用传输信息,如果不进行序列化方式,直接进行网络传输或者保存在磁盘中,会导致乱码。转化为序列化的方式进行传输后,中文或者符号就可以转变为字节流或者字符流的形式在计算机网络中进行传输,这样就不会形成乱码问题。
2.序列化的方式
方式一:实现Serializable接口
import java.io.Serializable;
public class Person implements Serializable {
private int id;
private String name;
private int age;
private String gender;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getGender() {
return gender;
}
public void setGender(String gender) {
this.gender = gender;
}
@Override
public String toString() {
return "Person{" +
"id=" + id +
", name='" + name + '\'' +
", age=" + age +
", gender='" + gender + '\'' +
'}';
}
}
方式二:以String的方式进行传输;
public class PersonDemo {
public static void main(String[] args) {
Person person = new Person();
person.setId(0);
person.setName("张三");
person.setAge(18);
person.setGender("男");
String s = person.toString();
System.out.println(s);
}
}
//输出结果为:
//Person{id=0, name='张三', age=18, gender='男'}
可以看出来这种方式的弊端就是当我们传输一个java对象时,另一端收到这个对象时,不好解析;
方式三:JSON序列化
采用阿里开源的Fastjson方式
导入pom.xml文件依赖
<dependencies>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.59</version>
</dependency>
</dependencies>
import com.alibaba.fastjson.JSON;
public class PersonDemo {
public static void main(String[] args) {
Person person = new Person();
person.setId(0);
person.setName("张三");
person.setAge(18);
person.setGender("男");
String s = JSON.toJSONString(person);
}
}
//输出结果为:{"age":18,"gender":"男","id":0,"name":"张三"}
可以看出来以json的方式进行序列化,另一端接收到这个对象时更容易进行解析。