代码:java
package code; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import java.io.ObjectInputStream; import java.io.ObjectOutputStream; import java.io.Serializable; public class SerializableTest implements Serializable { private static final long serialVersionUID = 1L; private String name = "who"; private int age = 24; public static void main(String[] args) { write(); // read(); } /** * 将对象序列化 * * @author LiuJie * @time 2016年7月23日 下午11:41:09 */ public static void write() { try { // ObjectOutputStream能把Object输出成Byte流 ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream("D:\\Users\\杰\\Desktop\\out.txt"));// 输出流保存的文件名为 SerializableTest obj = new SerializableTest(); obj.age = 11; oos.writeObject(obj); oos.flush(); // 缓冲流 oos.close(); // 关闭流 } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } } /** * 反序列化 * * @author LiuJie * @time 2016年7月23日 下午11:44:37 */ public static void read() { ObjectInputStream oin = null; try { oin = new ObjectInputStream(new FileInputStream("D:\\Users\\杰\\Desktop\\out.txt")); } catch (FileNotFoundException e1) { e1.printStackTrace(); } catch (IOException e1) { e1.printStackTrace(); } SerializableTest obj = null; try { obj = (SerializableTest) oin.readObject(); } catch (ClassNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } System.out.println("name=" + obj.name); System.out.println("age=" + obj.age); } }
序列化后的文件:code
读取文件反序列化:对象
name=promonkey
age=22接口
静态变量不会序列化,也就是说吧name或age变成static,反序列化后输出的值仍是当前类的静态变量值。it
transient关键字修饰的变量也不能被序列化,这个关键字就是为了让序列化时忽略一些不但愿序列化的值。io
父类实现序列化,子类自动实现序列化,不须要显式实现Serializable接口;class
序列化是深复制,变量对象的值也会序列化。import