首页 > 代码库 > 每天进步一点点-序列化和反序列(将对象写入硬盘文件and从硬盘文件读出对象)
每天进步一点点-序列化和反序列(将对象写入硬盘文件and从硬盘文件读出对象)
一个类如果实现了Serializable接口,那么这个类创建的对象就是所谓序列化的对象。所谓“对象序列化”: 简单一句话:使用它可以象存储文本或者数字一样简单的存储对象。一个应用是,程序在执行过程中突然遇到短电或者其他的故障导致程序终止,那么对象当前的工作状态也就会丢失,这对于有些应用来说是可怕的。用对象序列化就可以解决这个问题,因为它可以将对象的全部内容保存于磁盘的文件,这样对象执行状态也就被存储了,到需要时还可以将其从文件中按原样再读取出来,这样就解决了数据丢失问题。对象序列化可以简单这么实现:为需要被序列化的对象实现Serializable接口,该接口没有需要实现的方法,implements Serializable只是为了标注该对象是可被序列化的,然后使用一个输出流(如:FileOutputStream)来构造一个ObjectOutputStream(对象流)对象,接着,使用ObjectOutputStream对象的writeObject(Object obj)方法就可以将参数为obj的对象写出(即保存其状态),要恢复的话则用输入流。
import Student; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import java.io.ObjectInputStream; import java.io.ObjectOutputStream; import java.io.Serializable; class Student implements Serializable { private static final long serialVersionUID = 1L; //最好加上吧 String name; int id; int age; String department; public Student(String name, int id, int age, String department) { this.age = age; this.department = department; this.id = id; this.name = name; } public void say(){ System.out.println("hi"+name); } } public class serializtion { public static void main(String[] args) throws IOException { Student s1 = new Student("张三", 1, 15, "化学"); Student s2 = new Student("李四", 2, 19, "生物"); Student s3 = new Student("龙儿", 2, 19, "生物"); Student s4=null; FileOutputStream fout = new FileOutputStream("student.txt"); ObjectOutputStream out = new ObjectOutputStream(fout); out.writeObject(s1); out.writeObject(s2); out.writeObject(s3); out.close(); FileInputStream fin = new FileInputStream("student.txt"); ObjectInputStream in = new ObjectInputStream(fin); try { s1 = (Student) in.readObject(); s2 = (Student) in.readObject(); s4 = (Student) in.readObject(); } catch (ClassNotFoundException e) {//照样可以反序列化出来 // TODO Auto-generated catch block e.printStackTrace(); } in.close(); System.out.print("name:" + s1.name); System.out.print(" id:" + s1.id); System.out.print(" age:" + s1.age); System.out.println(" department:" + s1.department); System.out.print("name:" + s2.name); System.out.print(" id:" + s2.id); System.out.print(" age:" + s2.age); System.out.println(" department:" + s2.department); //name:张三 id:1 age:15 department:化学 //name:李四 id:2 age:19 department:生物 s4.say();//从文件中反序列化出来的对象照样可以调用自己的方法 } }
每天进步一点点-序列化和反序列(将对象写入硬盘文件and从硬盘文件读出对象)
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。