实现序列化:
1)使用Serializable接口实现序列化
首先我们定义一个对象类User
public class User implements Serializable {
//序列化ID
private static final long serialVersionUID = 1L;
private int age;
private String name;
//getter和setter方法、
//toString方法}
接下来,在Test类中去实现序列化和反序列化。
public class Test {
public static void main(String[] args) throws Exception, IOException {
//SerializeUser();
DeSerializeUser();
}
//序列化方法
private static void SerializeUser() throws FileNotFoundException, IOException {
User user = new User();
user.setName("Java的架构师技术栈");
user.setAge(24);
//序列化对象到文件中
ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream("G://Test/template"));
oos.writeObject(user);
oos.close();
System.out.println("序列化对象成功");
}
//反序列化方法
private static void DeSerializeUser() throws FileNotFoundException, IOException{
File file = new File("G://Test/template");
ObjectInputStream ois = new ObjectInputStream(new FileInputStream(file));
User newUser = (User)ois.readObject();
System.out.println("反序列化对象成功"+newUser.toString());
}}
2)使用Externalizable接口实现序列化
首先,定义一个User1类
public class User1 implements Externalizable{
private int age;
private String name;
//getter、setter
//toString方法
public User1() {}
@Override
public void writeExternal(ObjectOutput out) throws IOException {
}
@Override
public void readExternal(ObjectInput in) throws IOException, ClassNotFoundException {
}}
Externalizable和Serializable接口的区别:
1)Externalizable继承自Serializable接口
2)需要我们重写writeExternal()与readExternal()方法
3)实现Externalizable接口的类必须要提供一个public的无参的构造器。
作用:
1)序列化就是一种用来处理对象流的机制,所谓对象流也就是将对象的内容进行流化,可以对流化后的对象进行读写操作,也可以将流化后的对象传输与网络之间;
2)为了解决对象流读写操作时可能引发的问题(如果不进行序列化,可能会存在数据乱序的问题)
3)序列化除了能够实现对象的持久化之外,还能够用于对象的深度克隆
序列化的使用场景
1)永久性保存对象,保存对象的字节序列到本地文件或者数据库中;
2)通过序列化以字节流的形式使对象在网络中进行传递和接收;
3)通过序列化在进程间传递对象;
更多java知识请关注java基础教程栏目。