java serializable序列化接口的详解
一、serializable序列化是什么:
使用继承serializable接口的类的可以实现序列化和反序列化的功能,未实现的serializable接口的类将不能无法使其任何状态序列化或者反序列化,可序列化的所有子类本身都是可序列化的。
二、serializable序列化原理:
1.序列化serializable接口没有任何方法的,接口做为jvm解析的时候的标识。2.对象的寿命随着生成的对象的作用域的结束而结束,实现序列化的对象可以在内存(或者流中)中保存了对象的状态也(也就是实例变量,不是方法),并且在需要对象的时候可以将对象恢复。
三、serializable序列化优缺点:
优点:1、在传输过程中保存数据的完整性(便于传输) 2、反序列化出完整的相对应的对象比较容易方便 3.可以将对象序列化和反序列化。
缺点:增加jvm的压力(微乎其微)。
四、serializable序列化使用场景:
1、将对象网络传输,2、将对象存储为持久化。
五、serializable序列化使用例子:
1.使用serializable实现的类
Student
public class Student implements Serializable {//1、实现serializable接口,2.如果没有实现Serializable接口
private String name;
private String course;
private int grade;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getCourse() {
return course;
}
public void setCourse(String course) {
this.course = course;
}
public int getGrade() {
return grade;
}
public void setGrade(int grade) {
this.grade = grade;
}
}
2.成果显示类,
Demo
public class Demo {
public static void main(String[] args){
Student student =new Student();
student.setName("liutianxing");
student.setCourse("数学");
student.setGrade(80);
try {
ObjectOutputStream objectOutputStream = new ObjectOutputStream(new FileOutputStream("output.txt"));
objectOutputStream.writeObject("string");
objectOutputStream.writeObject(student);
objectOutputStream.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
try {
ObjectInputStream objectInputStream;
objectInputStream = new ObjectInputStream(new FileInputStream("output.txt"));
String string="";
Student sd=null ;
try {
string = (String) objectInputStream.readObject();
sd= (Student) objectInputStream.readObject();
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
objectInputStream.close();
System.out.println(string + ", name: " +sd.getName() + ", course: " + sd.getCourse()+",grade"+sd.getGrade());
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
结果:
3、Student使用序列化接口serializable结果
4、Student没有使用序列化接口serializable结果
java.io.NotSerializableException: Student
at java.io.ObjectOutputStream.writeObject0(Unknown Source)
at java.io.ObjectOutputStream.writeObject(Unknown Source)
at Demo.main(Demo.java:19)
java.io.WriteAbortedException: writing aborted; java.io.NotSerializableException: Student
at java.io.ObjectInputStream.readObject0(Unknown Source)
at java.io.ObjectInputStream.readObject(Unknown Source)
at Demo.main(Demo.java:35)
Caused by: java.io.NotSerializableException: Student
at java.io.ObjectOutputStream.writeObject0(Unknown Source)
at java.io.ObjectOutputStream.writeObject(Unknown Source)
at Demo.main(Demo.java:19)