流对象的简析

对象流:有的时候,我们可能需要将内存中的对象持久化到硬盘上,或者将硬盘中的对象信息读到内存中,这个时候我们需要使用对象输入输出流。    

序列化: 是对象转换成一个字节序列的过程,是一个写操作

反序列化:   一个字节序列转换成对象的过程 ,是一个读操作

ObjectOutputStream

构造器:          

ObjectOutputStream(OutputStream out)

          创建一个指定字节输出流的对象输出流对象。

          

常用方法: 除了提供了一些基本数据类型的写方法外,还提供了

void writeObject(Object obj)

          将内存中的对象持久化到硬盘上

                    

ObjectIntputStream

     ObjectIntputStream(OutputStream out)

          创建一个指定字节输入流的对象输入流对象。

          

常用方法:除了提供了一些基本数据类型的读方法外,还提供了

     Object readObject();

          从硬盘上读取一个字节序列,转换成对象

               

Serializable:序列化接口

          如果想将对象序列化,那么对象的类型必须实现此接口。此接口

内什么都没有,只是一个序列化标识。

serialVersionUID:

      每个能序列化的对象,在被序列化时,系统会默认给此对象的类计算一个

序列化版本号。不同的平台默认提供的序列化版本号多数情况下不会相同。因此当我们反序列时,如果硬盘里存储的对象的版本号与当前设计的类型的版本号不一致。

会出现运行时异常:

java.io.InvalidClassException,这种情况叫不兼容问题。

   

如果我们想解决不兼容问题。我们应该手动提供版本号。尽可能的相同这样来解决不兼容问题。

      

另外一种情况:

序列化过后,可能会修改类型,如果使用系统默认提供的版本号,在反序列时,会有异常,如果手动提供,不出现异常多出来的成员变量,以默认值的形式,赋值给反序列化回来的对象。

transient:成员变量的一个修饰词,可以理解为瘦身。

有的时候,在序列化对象时,我们不需要将对象的某些成员变量值持久化到硬盘上(因为不重要),此时,我们可以在这些成员变量前添加修饰词transient(保存时,进行减肥)

---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

字符流:

在输出输入操作时,以字符为单位进行操作,默认是unicode编码集。

字符流的抽象父类分别是:

Writer/Reader

   Writer提供了字符输出流的常用方法

     void close():关闭

     void write(char[] cbuf):写一个字符数组

     void write(char[] cbuf, int off, int len)写一个字符数组的一部分

     write(int c):写一个字符

     write(String str):写一串字符

     write(String str, int off, int len) 写字符串的一部分

   Reader提供了字符输入流的常用方法

     int read():读一个字符,存储到int的低16位

     int read(char[] cbuf):将数据读进字符数组中,返回的是读取的有效字符个数

     int read(char[] cbuf, int off, int len) 将字符读入数组的一部分。

-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

子类中转换流:

    OutputStreamWriter:

              将字符转换成字节写出到硬盘上

构造器:          

    OutputStreamWriter(OutputStream out)

              创建一个指定字节输出流的字符输出流对象,采用的是系统默认的编码集

    OutputStreamWriter(OutputStream out, Charset cs)

    OutputStreamWriter(OutputStream out, CharsetEncoder enc)

    OutputStreamWriter(OutputStream out, String charsetName)

              创建一个指定字节输出流的字符输出流对象,采用指定编码集。

    

  write(int a);

            当a的低16位,如果被设计成相应的字符时,如果两个字节都是

有效字节,会写出两个。如果低16位对应是无效字符,或是有效字节只有一位时,会写一个字节。      

   

   InputStreamReader()

             将字节转换成字符读进程序中

构造器:

    InputStreamReader(InputStream in)

             创建一个使用默认字符集的InputStreamReader。  

    InputStreamReader(InputStream in, Charset cs)

InputStreamReader(InputStream in, CharsetDecoder dec)

InputStreamReader(InputStream in, String charsetName)

创建一个使用指定字符集的InputStreamReader。  

----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

缓冲流:

PrintWriter:提供了丰富的方法,比BufferedWriter更加常用,此类型提供了

行自动刷新的功能

构造器:       

       PrintWriter(File file)

       PrintWriter(OutputStream out)

       PrintWriter(OutputStream out, boolean autoFlush)        

       PrintWriter(String fileName)

       PrintWriter(Writer out)

       PrintWriter(Writer out, boolean autoFlush)

       

上述构造器,有第二个参数的,可以设置为true,表示行自动刷新。  

只有一个参数的构造器,相当有两个参数时,设置为false的情况,即取消了行自动刷新的功能

       

常用方法:

       println()

       通过写入行分隔符字符串来终止当前行。

       println(boolean x)

打印一个布尔值,然后终止该行。  

void println(char x)

打印一个字符,然后终止该行。  

void println(char[] x)

打印字符数组,然后终止行。  

void println(double x)

打印双精度浮点数,然后终止行。  

void println(float x)

打印一个浮点数,然后终止该行。  

void println(int x)

打印一个整数,然后终止该行。  

void println(long x)

打印一个长整型,然后终止行。  

void println(Object x)

打印一个对象,然后终止该行。  

void println(String x)  

-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

BufferedReader:提供了一个缓冲区

构造器:   

      BufferedReader(Reader in)

            创建使用默认大小的输入缓冲区的缓冲字符输入流。  

      BufferedReader(Reader in, int sz)

            创建使用指定大小的输入缓冲区的缓冲字符输入流。

常用方法:  

      String readLine():

            读一行字符串,读至换行符号为止,返回的数据不包含换行符当返回值为null时,表示读至文件末尾

----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

文件字符流:

   FileWriter/FileReader

   

   FileWriter:相当于OutputStreamWriter与FileOutputStream合起来的功能,内部也维护了一个缓冲区,但是需要手动flush

构造器:

    FileWriter(File file)

    FileWriter(File file, boolean append)

    FileWriter(String fileName)

    FileWriter(String fileName, boolean append)

   

append:表示追加,但是此流不能设置字符集。常用方法与 OutputStreamWriter的差不多

   

 FileReader:相当于InputStreamReader和FileInputStream合起来的功能内部也维护了一个缓冲区

构造器:

      FileReader(File file)

      FileReader(String fileName)

常用方法与InputStreamReader的方法差不多

-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------

System是一个final修饰的类型

两个成员变量:

      out:是PrintStream类型,默认的输出目的地是控制台console

      in: 是InputStream类型, 默认的数据源是键盘

原文地址:https://www.cnblogs.com/mark5/p/10919160.html