java输入输出(8)序列化和反序列化

  1. 在要将java对象保存到磁盘或者进行网络传输的时候,需要将这个java对象转换为二进制数据,也就是“序列化”,这里介绍的是使用实现Serializable接口来实现序列化的,实现Serializable接口非常简单,只要在类声明的后面加上implements Serializable就好了,不用实现什么方法。下面是将一个java对象序列化的示例,具体的讲解穿插在代码之中。
    //将使用Person类的对象进行序列化,所以Person类要实现Serializable接口,
    // 很简单,就直接implements java.io.Serializable就行
    
    public class Person implements java.io.Serializable{
        private String name;
        private int age;
        public Person(String name, int age){
            System.out.println("有参数的构造器");
            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;
        }
    
        public void speak(){
            System.out.println("ok");
        }
    }
    
    //将一个实现了Serializable接口的Person类的对象保存到.tct文件中
    import java.io.FileOutputStream;
    import java.io.IOException;
    import java.io.ObjectOutputStream;
    
    public class WriteObject {
        public static void main(String args[]){
            try(
                ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream("object.txt"))){
    //            ObjectOutputStream是处理流,要建立在结点流的基础上
    
                Person person = new Person("孙悟空",500);
    
                oos.writeObject(person);
    //            这一步就是将序列化对象保存到文件中
    
            }catch (IOException e){
                e.printStackTrace();
            }
        }
    }
    
    //运行程序之后,打开object.txt可以看到java对象(可能会有乱码问题)
  2. 从文件中读取java对象和将java对象保存到文件的过程差不多,需要指出的是:必须提供java对象所属的class文件,否则会引发异常。

  3. 可以从下面的例子看出来,程序并没有通过构造器来实例化对象

    import java.io.FileInputStream;
    import java.io.IOException;
    import java.io.ObjectInputStream;
    
    public class ReadObject {
        public static void main(String args[]){
            try{
                ObjectInputStream ois = new ObjectInputStream(new FileInputStream("object.txt"));
                Person person = (Person)ois.readObject();
                System.out.println(person.getAge() + "," + person.getName());
                person.speak();
            }catch (Exception e){
                e.printStackTrace();
            }
        }
    }
    

猜你喜欢

转载自blog.csdn.net/weixin_39452731/article/details/82563025
今日推荐