java序列化
1. package com.zh.serializable; import java.io.*; import java.util.*; public class MySerializable { /**序列化与反序列化的运用,序列化就是把一个对象写到一个输入流中 * 反序列化就是反过来 * @param args * @throws IOException * @throws Exception */ public static void main(String[] args) throws Exception { // TODO Auto-generated method stub //使用对象输出流 ObjectOutputStream out=new ObjectOutputStream(new FileOutputStream("D:/abc.txt")); String obj1="hello"; Date obj2=new Date(); Customer obj3=new Customer("tom", 20); //序列化对象 out.writeObject(obj1); out.writeObject(obj2); out.writeObject(obj3); out.close(); //反序列化 ObjectInputStream in=new ObjectInputStream(new FileInputStream("D:/abc.txt")); String obj11=(String)in.readObject(); System.out.println("objll:"+obj11); System.out.println("objll==obj1:"+(obj11==obj1)); System.out.println("obj11.equals(obj11):"+obj11.equals(obj11)); Date obj22=(Date)in.readObject(); System.out.println("obj22:"+obj22); System.out.println("obj2==obj22:"+(obj2==obj22)); System.out.println("obj22.equals(obj2):"+obj2.equals(obj22)); Customer obj33=(Customer)in.readObject(); System.out.println("obj33:"+obj33); System.out.println("obj3==obj33:"+(obj3==obj33)); System.out.println("obj3.equals(obj33):"+obj3.equals(obj33)); System.out.println(obj33.getAge()); in.close(); } } //要想对象被序列化 就要继承Serializable class Customer implements Serializable{ private String name; private int age; public Customer(String name, int age) { this.name = name; this.age = age; System.out.println("call second constructor"); } public boolean equals(Object o){ if(this == o){ return true; } if(! (o instanceof Customer)){ return false; } final Customer other=(Customer)o; if(this.name.equals(other.name) && this.age==other.age){ return true; }else{ return false; } } public String toString(){ return "name="+name+",age"+age; } public String getName() { return name; } public int getAge() { return age; } public void setName(String name) { this.name = name; } public void setAge(int age) { this.age = age; } } 2. package com.zh.serializable; import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.io.IOException; import java.io.ObjectInputStream; import java.io.ObjectOutputStream; import java.io.Serializable; public class MySerializable1 implements Serializable{ /** * 用transient修饰可以不被序列化 因为在序列化后,容易被文件读取或拦截网络传输数据而 * 偷窥 * @param args */ private String name; private transient String password; public MySerializable1(String name, String password) { super(); this.name = name; this.password = password; } public String toString(){ return name+" "+password; } public static void main(String[] args) throws IOException, ClassNotFoundException { // TODO Auto-generated method stub MySerializable1 user=new MySerializable1("zhouhai", "123456"); System.out.println("before serialization: "+user); ByteArrayOutputStream buf=new ByteArrayOutputStream(); //把user对象序列化到一个字节缓存中 ObjectOutputStream o=new ObjectOutputStream(buf); o.writeObject(user); ObjectInputStream in=new ObjectInputStream(new ByteArrayInputStream(buf.toByteArray())); user=(MySerializable1)in.readObject(); System.out.println("after serialization: "+user); } }