IO流:
4个基本类:InputStream OutputStream Reader Writer
常用的类: FileInputStream FileOutputStream FileReader FileWriter
序列化和反序列化的两个类:ObjectInputStream 和 ObjectOutputStream
序列化:(ObjectOutputStream):将数据从内存写到硬盘上
反序列化:(ObjectInoputStream):将数据从硬盘写到内存上
实现对象的序列化,需要实体类先实现serializable接口
注意:在实现序列化接口是时候一般要生成一个serialVersionUID字段,叫做版本号,要保持版本号的一致 来进行序列化,
作用是为了防止序列化出错。
Person类:
package io; import java.io.Serializable; public class Person implements Serializable{ private static String name="张三"; private transient int age=12; private String address="西安"; 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 getAddress() { return address; } public void setAddress(String address) { this.address = address; } }
ObjectOutputStreamDemo:
package io; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import java.io.ObjectOutputStream; /* * 序列化:将数据从硬盘写到内存上 * */ public class ObjectOutputStreamDemo { public static void main(String[] args) throws FileNotFoundException, IOException { ObjectOutputStream oos=new ObjectOutputStream(new FileOutputStream("E://序列化.txt")); Person p=new Person(); p.setName("李白"); p.setAge(99); oos.writeObject(p); oos.close(); } }
ObjectInputStreamDemo:
package io; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.IOException; import java.io.ObjectInputStream; /* *反序列化:将数据从主存写到硬盘上。 *transient:被它修饰的数据将不参与序列化。 *static:被它修饰的数据也不参与序列化。 * */ public class ObjectInputStreamDemo { public static void main(String[] args) throws FileNotFoundException, IOException, ClassNotFoundException { ObjectInputStream ois=new ObjectInputStream(new FileInputStream("E://序列化.txt")); Person p = (Person) ois.readObject(); System.out.println(p.getName()+","+p.getAge()+","+p.getAddress()); ois.close(); } }
结果截图:
注意:被transient 和 static 修饰的字段,不参数序列化。
但是二者稍有区别:
被static修饰:初始值保持不变。
被transient修饰:初始值变为null 或 0。