对象流的两个类:
ObjectOutputStream:将java对象的基本数据类型和图形写入OutputStream
ObjectInputStream:对以前使用的ObjectOutputStream写入的基本数据和对象进行反序列化
序列化一组对象:
在序列化操作中,同时序列化多个对象时,反序列化也必须按顺序操作,如果想要序列化一组对象可以采用 对象数组的形式,因为对象数组可以向Object进行转型操作。
transient关键字:
如果用transient声明一个实例变量,当对象存储时,它的值不需要维持。
有该关键字修饰的变量在序列化时会被忽略
对象序列化就是把对象写入到输出流中,用于存储传输;反序列化就是从输出流读取对象。
何时需要把对象序列化?
1.把对象保存到文件中(存储到物理介质)
2.对象需要在网络上传输
创建一个对象:
//该类对象需要被序列化,该类要实现Serializable接口
//该类中无任何方法 是一个标记接口
public class Dog implements Serializable {
private String name;
private int age;
private String sex;
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 getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
public Dog(String name, int age, String sex) {
this.name = name;
this.age = age;
this.sex = sex;
}
public Dog(){}
@Override
public String toString() {
return "Dog{" +
"name='" + name + ''' +
", age=" + age +
", sex='" + sex + ''' +
'}';
}
}
public class Main {
private static void writeObject() throws IOException {
Dog dog=new Dog("wang",2,"ci");
File file=new File("D:\MyFile\dog.obj");
OutputStream out=new FileOutputStream(file);
ObjectOutputStream oos=new ObjectOutputStream(out);
oos.writeObject(dog);
oos.close();
}
private static void readObject() throws IOException, ClassNotFoundException {
File file=new File("D:\MyFile\dog.obj");
InputStream in=new FileInputStream(file);
ObjectInputStream ois=new ObjectInputStream(in);
Dog dog=(Dog) ois.readObject();
ois.close();
System.out.println(dog);
}
public static void main(String[] args) throws IOException, ClassNotFoundException {
writeObject();
readObject();
}
}
读取的对象跟原对象不是一个对象:
private static Dog writeObject() throws IOException {
Dog dog=new Dog("wang",2,"ci");
File file=new File("D:\MyFile\dog.obj");
OutputStream out=new FileOutputStream(file);
ObjectOutputStream oos=new ObjectOutputStream(out);
oos.writeObject(dog);
oos.close();
return dog;
}
private static Dog readObject() throws IOException, ClassNotFoundException {
File file=new File("D:\MyFile\dog.obj");
InputStream in=new FileInputStream(file);
ObjectInputStream ois=new ObjectInputStream(in);
Dog dog=(Dog) ois.readObject();
ois.close();
System.out.println(dog);
return dog;
}
public static void main(String[] args) throws IOException, ClassNotFoundException {
Dog dog1=writeObject();
Dog dog2=readObject();
System.out.println(dog1.hashCode());
System.out.println(dog2.hashCode());
}



