概念:
序列化:把一个对象以二进制的形式存入磁盘中,这样的一种传输方式就叫做序列化,就是把对象写入文件
反序列化:自然就是从磁盘中拿出这个对象,这个还原的过程就叫做反序列化。就是拿出文件中的对象
具体实现:
java的对象流中有的两个类:
ObjectOutputStream
:将java对象的基本数据类型写入OutputStream
ObjectInputStream
:对以前使用ObjectOutputStream写入的基本数据和对象进行反序列化
代码演示:
写一个需要序列化的对象(需要实现Serialiable接口):
class Dog implements Serializable { private int age; private String name; public Dog(int age, String name) { this.age = age; this.name = name; } // get,set,toString }
序列化代码:
public class Test9 { public static void main(String[] args) { Dog dog1 = new Dog(12, "lili"); Dog dog2 = new Dog(13, "苍老师"); Dog dog3 = new Dog(14, "王五"); Dog dog4 = new Dog(15, "李四"); Dog[] dogs = {dog1,dog2,dog3,dog4}; writeObject(dogs); } /** * 序列化方法 */ private static void writeObject(Dog... dog) { try { // 需要写入的文件位置 OutputStream outputStream = new FileOutputStream("E:\\idea_workspace3\\yangli\\class_obj\\src\\com\\lili\\file\\Dog.obj"); ObjectOutputStream objectOutput = new ObjectOutputStream(outputStream); objectOutput.writeObject(dog); objectOutput.close(); } catch (IOException e) { e.printStackTrace(); } } }
反序列化方法:
private static void readObject() { try { InputStream inputStream = new FileInputStream("E:\\idea_workspace3\\yangli\\class_obj\\src\\com\\lili\\file\\Dog.obj"); ObjectInputStream objectInputStream = new ObjectInputStream(inputStream); Dog[] o = (Dog[]) objectInputStream.readObject(); objectInputStream.close(); System.out.println(Arrays.toString(o)); } catch (IOException | ClassNotFoundException e) { e.printStackTrace(); } }
扩展:
transient关键字:
如果transient声明一个实例变量,当对象存储时,它的值会被忽略,例如
private transient int id;