zoukankan      html  css  js  c++  java
  • 序列化反序列化流、打印流

    ObjectOutputStream(序列化流)

      ObjectOutputStream是序列化流,可以将Java程序中的对象写到文件中。

      ObjectOutputStream 构造方法:

        ObjectOutputStream(OutputStream out):参数要传递字节输出流。

      ObjectOutputStream写对象的方法(特有方法):

        void writeObject(Object obj): 向文件中写对象。

      ObjectOutputStream 的使用步骤:

        创建序列化流,用来写。

        调用 writeObject 方法,写对象。

        释放资源。

      注意: 要使用序列化流向文件中写的对象,必须实现 Serializable 接口。

      例:

     1 // 创建一个Person对象
     2 Person p=new Person("大灰狼",18);
     3 //明确目的地
     4 FileOutputStream fos=new FileOutputStream("D:\demo0723\person.txt");//不能续写true
     5 //创建序列化流
     6 ObjectOutputStream oos=new ObjectOutputStream(fos);
     7 //将对象写入文件中
     8 oos.writeObject(p);
     9 //释放资源
    10 oos.close();

    ObjectInputStream(反序列化流)

      ObjectInputStream 是反序列化流, 可以将文件中的对象读取到 Java 程序中。

      ObjectInputStream 的构造方法:

        ObjectInputStream(InputStream in):参数要传递字节输入流。

      ObjectInputStream 读取对象的方法(特有的方法):

        Object readObject(): 从文件中读取对象,并将该对象返回。

      反序列化流的使用步骤:

        创建 ObjectInputStream 反序列化流。

        调用 readObject 方法,读取对象。

        释放资源。

      注意:调用 readObject 方法读取对象时,对象所对应的类不存在,那么会报错(ClassNotFoundException)

     1 public static void read() throws ClassNotFoundException, IOException{
     2         //明确数据源
     3         FileInputStream fis=new FileInputStream("D:\demo0723\person.txt");
     4         //创建反序列化刘
     5         ObjectInputStream ois=new ObjectInputStream(fis);
     6         //从person.txt中将对象读取出来
     7         Person p=(Person)ois.readObject();
     8         System.out.println(p);
     9         //释放资源
    10         ois.close();
    11     }

      特殊情况:

        被 static 修饰的成员变量无法序列化,无法写到文件。

        如果不希望某个成员变量写到文件,同时又不希望使用 static 关键字, 那么可以使用 transient。transient 关键字表示瞬态,被 transient 修饰的成员变量无法被序列化。

        如果想要修改序列化后的文件 ,也可以加serialVersionUID,使序列化时生成的值与反序列化时值一致。

      

    打印流:

      打印流是输出信息最方便的类,注意包含字节打印流PrintStream和字符打印流:PrintWriter。打印流提供了非常方便的打印功能,

      可以打印任何类型的数据信息,例如:小数,整数,字符串。

      打印流的特点:

        不负责数据源,只负责数据目的

        为其他输出流,添加功能

        永远不会抛出IO异常,但是可能抛出别的异常

      特有的方法:print()和println()方法,System.out.print()方法可以打印任何数据类型。

      PrintSteam构造方法接收:

                File类型、字符串文件名、字节输出流OutputStream

      例:

    //明确目的地
            FileOutputStream fos=new FileOutputStream("D:\demo0723\print.txt");
            //创建打印流
            PrintStream ps=new PrintStream(fos);
            //输出
            ps.print("你好");
            ps.print(true);
            ps.println(123);
            //释放资源
            ps.close();

      PrintWriter构造方法接收:

                File类型、字符串文件名、字节输出流OutputStream、字符输出流Writer

      例:

     1 //明确目的地
     2     FileWriter fw=new FileWriter("D:\demo0723\print.txt",true);  //续写
     3     //创建字符打印流
     4     PrintWriter pw=new PrintWriter(fw,true);//自动刷新
     5     //输出
     6     pw.println(false);
     7     pw.println("大灰狼");
     8     pw.print(1.2);
     9     //释放资源
    10     pw.close();

     

  • 相关阅读:
    单元测试大揭密
    浅析C#中 ConcurrentDictionary的实现
    C#中 ??、 ?、 ?: 、?.、?[ ]
    队列-exchange
    matlab绘制一个点
    Ubuntu install of ROS Melodic
    matlab绘制树
    matlab scatter3函数
    多个QDockWidget用程序控制自动tab切换
    基于IFC数据的施工吊装模拟
  • 原文地址:https://www.cnblogs.com/zhai113/p/11757853.html
Copyright © 2011-2022 走看看