美文网首页
32. Java IO: ObjectInputStream

32. Java IO: ObjectInputStream

作者: kopshome | 来源:发表于2017-12-08 11:37 被阅读0次

    想要查看此教程的目录请点击:Java IO教程目录贴地址


    ObjectInputStream(java.io.ObjectInputStream)可以从InputStream读取Java对象来代替原始的字节。用ObjectInputStream来包装InputStream然后就可以从它里面直接读取对象。当然,读取的字节必须是有效且可序列化的Java对象,否则就会读取失败。
    一般情况下你会用ObjectInputStream读取对象,用ObjectOutputStream写对象(序列化)。稍后会给出相关的例子。

    ObjectInputStream例子

    下面是Java ObjectInputStream 例子:

    ObjectInputStream objectInputStream =
        new ObjectInputStream(new FileInputStream("object.data"));
    
    MyClass object = (MyClass) objectInputStream.readObject();
    //etc.
    
    objectInputStream.close();
    

    这个例子中你读取的对象必须是 MyClass的实例,并且已经被序列化到了文件object.data中通过ObjectOutputStream。
    在你序列化或反序列化之前,你必须已经实现了java.io.Serializable接口。更多的信息可以参考后面的文章 Java Serializable。

    ObjectInputStream 和 ObjectOutputStream同时使用

    在文章的开始我已经说要展示一个ObjectInputStream 和 ObjectOutputStream一起使用的例子,那么下面就是:

    import java.io.*;
    
    public class ObjectInputStreamExample {
    
        public static class Person implements Serializable {
            public String name = null;
            public int    age  =   0;
        }
    
    
        public static void main(String[] args) throws IOException, ClassNotFoundException {
    
            ObjectOutputStream objectOutputStream =
                new ObjectOutputStream(new FileOutputStream("data/person.bin"));
    
            Person person = new Person();
            person.name = "Jakob Jenkov";
            person.age  = 40;
    
            objectOutputStream.writeObject(person);
            objectOutputStream.close();
    
    
            ObjectInputStream objectInputStream =
                new ObjectInputStream(new FileInputStream("data/person.bin"));
    
            Person personRead = (Person) objectInputStream.readObject();
    
            objectInputStream.close();
    
            System.out.println(personRead.name);
            System.out.println(personRead.age);
        }
    }
    

    例子首先创建了一个ObjectOutputStream实例并把一个FileOutputStream传入构造方法。然后创建了一个 Person 实例并将其写到ObjectOutputStream,然后关闭流。
    这个例子运行的结果就是:

    Jakob Jenkov
    40
    

    关闭ObjectInputStream

    关闭流的做法和上面文章中此处的内容几乎一致,可以参考

    相关文章

      网友评论

          本文标题:32. Java IO: ObjectInputStream

          本文链接:https://www.haomeiwen.com/subject/nmceixtx.html