IO流(ObjectStream流数据)

来源:互联网 发布:js reverse方法 编辑:程序博客网 时间:2024/05/22 04:50

IO流(ObjectStream流数据)

序列化流:将对象按照流的形式(在网络进行传输等等)封装成流数据:对象--->流数据:ObjectOutputStream反序列化流:将网络传输中的流数据又封装成了一个对象: 流数据-->对象   ObjectInputStream注意:    自定义的类通过实现 java.io.Serializable 接口以启用其序列化功能,未实现此接口的类将无法使其任何状态序列化或反序列化。注意:    如果在一个类中,该类的成员变量比较多,有时候为了让成员变量不被序列化,所有加一个关键字:transient    在每一次运行之后都会形成一个固定ID,如果对自定义类进行修改,再次运行就会有异常:java.io.InvalidClassException (ID发生了改变)    解决:        1.点击黄色警告线生成固定ID        2.local class incompatible: stream classdesc serialVersionUID = -3059867121192605950, local class serialVersionUID = -1219396793646518298           例:private static final long serialVersionUID = 1L;//默认的:default srial Version ID:默认版本ID

代码:
public class Person implements Serializable {

/** *  */private static final long serialVersionUID = 1L;//点击Person下面的黄色警告线即可生成private String name ;

// private int age ;
// int age ;
transient int age ;
public Person() {
super();
}
public Person(String name, int age) {
this.name = name;
this.age = age;
}
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;
}
@Override
public String toString() {
return “Person [name=” + name + “, age=” + age + “]”;
}
}

public static void main(String[] args) throws Exception {

// write();

     read();}private static void read() throws IOException, Exception {    //创建反序列化流对象    ObjectInputStream ois = new ObjectInputStream(new FileInputStream("b.txt"));    //一次读取一个数组    System.out.println(ois.readObject());    ois.close();}private static void write() throws FileNotFoundException, IOException {    //创建序列化流对象   ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream("b.txt"));   Person p = new Person("赵宇豪",23);   oos.writeObject(p);   oos.close();}

代码结果:

Person [name=赵宇豪, age=0]

//由于age被transient修饰,所以不能读取到