zoukankan      html  css  js  c++  java
  • 对象操作流--存储对象

    1.什么是对象操作流
        * 该流可以将一个对象写出, 或者读取一个对象到程序中. 也就是执行了序列化和反序列化的操作.
    * 2.使用方式
        * 写出: new ObjectOutputStream(OutputStream),     writeObject()
    
                public class Demo3_ObjectOutputStream {
        
                    /**
                     * @param args
                     * @throws IOException 
                     * 将对象写出,序列化
                     */
                    public static void main(String[] args) throws IOException {
                        Person p1 = new Person("张三", 23);
                        Person p2 = new Person("李四", 24);
                //        FileOutputStream fos = new FileOutputStream("e.txt");
                //        fos.write(p1);
                //        FileWriter fw = new FileWriter("e.txt");
                //        fw.write(p1);
                        //无论是字节输出流,还是字符输出流都不能直接写出对象
                        ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream("e.txt"));//创建对象输出流
                        oos.writeObject(p1);
                        oos.writeObject(p2);
                        oos.close();
                    }
                
                }
    _IO流(对象操作流ObjectInputStream)
    * 读取: new ObjectInputStream(InputStream), readObject()
        * 
                public class Demo3_ObjectInputStream {
    
                    /**
                     * @param args
                     * @throws IOException 
                     * @throws ClassNotFoundException 
                     * @throws FileNotFoundException 
                     * 读取对象,反序列化
                     */
                    public static void main(String[] args) throws IOException, ClassNotFoundException {
                        ObjectInputStream ois = new ObjectInputStream(new FileInputStream("e.txt"));
                        Person p1 = (Person) ois.readObject();    ###########
                        Person p2 = (Person) ois.readObject();      ###########
                        System.out.println(p1);
                        System.out.println(p2);
                        ois.close();
                    }
                
                }
        
    IO流(对象操作流优化)
    * 将对象存储在集合中写出
    
        Person p1 = new Person("张三", 23);
        Person p2 = new Person("李四", 24);
        Person p3 = new Person("马哥", 18);
        Person p4 = new Person("辉哥", 20);
        
        ArrayList<Person> list = new ArrayList<>();
        list.add(p1);
        list.add(p2);
        list.add(p3);
        list.add(p4);
        
        ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream("f.txt"));
        oos.writeObject(list);                                    //写出集合对象
        
        oos.close();
    * 读取到的是一个集合对象
    
            ObjectInputStream ois = new ObjectInputStream(new FileInputStream("f.txt"));
                ArrayList<Person> list = (ArrayList<Person>)ois.readObject();    //泛型在运行期会被擦除,索引运行期相当于没有泛型
            //想去掉黄色可以加注解            
            @SuppressWarnings("unchecked")
                for (Person person : list) {
                    System.out.println(person);
                }
            
            ois.close();
    竹杖芒鞋轻胜马,一蓑烟雨任平生。 回首向来萧瑟处,也无风雨也无晴。
  • 相关阅读:
    【BZOJ2599】[IOI2011]Race 树的点分治
    【BZOJ1787】[Ahoi2008]Meet 紧急集合 LCA
    【BZOJ1834】[ZJOI2010]network 网络扩容 最大流+最小费用流
    【BZOJ3012】[Usaco2012 Dec]First! Trie树+拓补排序
    【BZOJ2743】[HEOI2012]采花 离线+树状数组
    【BZOJ2946】[Poi2000]公共串 后缀数组+二分
    【BZOJ2157】旅游 树链剖分+线段树
    【BZOJ2661】[BeiJing wc2012]连连看 最大费用流
    【BZOJ1801】[Ahoi2009]chess 中国象棋 DP
    【BZOJ4236】JOIOJI STL
  • 原文地址:https://www.cnblogs.com/yaobiluo/p/11312584.html
Copyright © 2011-2022 走看看