objectOutputStream 对象的序列化,以流的形式将对象写入文件
构造方法:
- objectOutputStream(OutputStream out) 传入一个字节输入流创建objectOutputStream对象
- 成员方法:
- void writeObject(object obj) 将指定的对象写入objectOutputStream
- 使用步骤:
创建一个类,这个类实现Serializable接口,Serializable是一个标记
创建ObjectOutputStream对象,构造方法中传递字节输出流
使用ObjectOutputStream对象中的writeObject方法将对象写入文件中
释放资源
import java.io.Serializable; public class Student implements Serializable { // 属性设置为private private String name; private int age; private static String room; //无参数构造 public Student() { } //有参数构造 public Student(String name, int age, String room) { this.name = name; this.age = age; this.room=room; } //getter方法 public String getName() { return name; } public int getAge() { return age; } public static String getRoom() { return room; } //setter方法 public void setName(String name) { this.name = name; } public void setAge(int age) { this.age = age; } public static void setRoom(String room) { Student.room = room; } //重写equals方法 public boolean equals(Object obj){ if(obj instanceof Student) { //首先将得到的Object转为Student,否则使用不了Student特有的方法(多态的弊端) Student t = (Student) obj; return t.getAge() == this.getAge() && t.getName() == this.getName() && t.getRoom() == this.getRoom(); } return false; } @Override public String toString() { return "Student{" + "name='" + name + '\'' + ", age=" + age + '}'; } }
private static void test1() throws IOException { ObjectOutputStream oos=new ObjectOutputStream(new FileOutputStream("oos.txt")); oos.writeObject(new Student("zs",18,"h001")); oos.close(); }
objectInputStream 对象的反序列化流,把文件中保存的对象以流的形式读取出来使用
构造方法:
- objectInputStream(InputStream in) 传入InputStream字节输入流对象来创建一个objectInputStream对象
- 使用步骤
创建objectInputStream对象,传入字节输入流作为参数
使用objectInputStream对象的方法readObject来读取文件中的对象
打印对象
释放资源
private static void test2() throws IOException, ClassNotFoundException { ObjectInputStream ois=new ObjectInputStream(new FileInputStream("oos.txt")); Object o=ois.readObject(); Student t=(Student) o; System.out.println(t); ois.close(); }
特别注意的是,这里反序列化的时候,必须要保证序列化的类没有改变过,如果在序列化保存到文件中之后类被修改过了,那么需要重新序列化,否则反序列化会失败。文章来源:https://www.toymoban.com/news/detail-624382.html
使用static关键字和transient关键字修饰的变量不可以被序列化,所以我们如果不想要某个变量被序列化,那么可以使用static或者transient修饰文章来源地址https://www.toymoban.com/news/detail-624382.html
到了这里,关于java中的序列化和反序列化的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!