API-对象流,字符流,子类中转换流,缓冲流,文件字符流

对象流:
    有的时候,我们可能需要将内存中的对象持久化到硬盘上,或者将
    硬盘中的对象信息读到内存中,这个时候我们需要使用对象输入
    输出流。
    
     序列化: 是对象转换成一个字节序列的过程,是一个写操作
  反序列化:   一个字节序列转换成对象的过程 ,是一个读操作
  
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类型, 默认的数据源是键盘   
   

猜你喜欢

转载自blog.csdn.net/qq_42397691/article/details/82026483