黑马程序员——IO流

来源:互联网 发布:12306网络购票暂停 编辑:程序博客网 时间:2024/06/16 11:48

------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------


作用:IO是用于在计算机设备间进行数据传输的操作。

  

分类:根据流向分,可分为:

                         输入流-->读取数据

                         输出流-->写出数据

  IO流基本结构如下图:


基本IO流:

 

字节流:

      字节流是一次读取一个字节,可以用于处理所有的类型数据,比如:图片, MP3AVI视频文件。字节流是最基本的,所有的字节输入流和字节输出流的子类都是,主要用在处理二进制数据,它是按字节来处理的。

 

       |--字节输入流-->InputStream-->所有字节输入流的超类

字节流--|  

       |--字节输出流-->OutpurStream-->所有字节输出流的超类 

 

特点:InputStreamOutputStream都是抽象类,不能被实例化,实现这两个类就要通过其具体子类去实现。

     

 

字符流:

      字符流是一次读取两个字节,是专用于处理文本文件,所以只能处理文本文件,对于读写中文字符是十分方便(因为中文对应的字节数是两个,在UTF-8码表中是3个字节)

           |--字符输入流-->Reader-->所有字符输入流的超类

    字符流--|

           |--字符输出流-->Writer-->所有字符输出流的超类

 

特点:ReaderWriter都是抽象类,不能被实例化,实现这两个类就要通过其具体子类去实现。

 

 

其它IO流:

 

一、缓冲流:

       该类型对字节流或字符流的对象(子类对象)进行封装,提高了读写数据的效率。

字节输入流:BufferedInputStream bis = new BufferedInputStream(new InputStream(null));

字节输出流:BufferedOutputStream bos = new BufferedOutputStream(new OutputStream(null));

字符输入流:BufferedReader br = new BufferedReader(new Reader(null));      

字符输出流:BufferedWriter bw = new BufferedWriter(new Writer(null));

 

      特点:

           1BufferedReader有一次读取一个文本行的方法readLine();

           2BufferedWriter 有一次写入一个行分隔符的方法newLine();

 

二、转换流:

      因为字节流操作中文数据不是特别的方便,所以就出现了转换流,它是字节流转成字符流的桥梁,作用就是把字节流转换成字符流来使用。

      

            |--字节输入流转成字符输入流-->InputStreamReader-->父类是Reader

     转换流--|

            |--字节输出流转成字符输入流-->OutputStreamWriter-->父类是Writer

 

      特点:

           1、转换流本身就是一个字符流: 字符流 字节流+编码表。

           2、 转换流与编码有着一定的关系。

 

三、数据操作流:

      该流是对基本数据类型的数据进行读写操作,不需要再进一步进行转换,通常只要操作基本数据类型的数据,就需要通过DataStream进行包装。

 

                   |--DataInputStream-->父类是FilterInputStream

       DataStream--|

                   |--DataOutputStream-->父类是FilterOutputStream

 

      特点:

           DataOutputStream写出数据后,我们直接打印出来是读不懂的,只有用DataInputStream读取数据后打印才能读懂。

 

四、内存操作流:

      该流用于处理临时存储的数据信息,等程序一结束,数据就从内存中消失。

      分类:

           1、字节数组:

                       ByteArrayInputStreamByteArrayOutputStream

           2、字符数组:

                       CharArrayReaderCharArrayWriter

           3、字符串:

                     StringReaderStringWriter

       

      特点:

         内存操作流写入数据时,缓冲区会随着数据的不断写入而自动增长。内存操作流的close()方法无效。

 

五、打印流:

        该流只能写出数据,不能读取数据,并且可以操作任意类型的数据,也可以直接操作文本文件。         

                    |--字节打印流-->PrintStream-->父类是OutputStream

             打印流--|

                    |--字符打印流-->PrintWriter-->父类是Writer

 

        特点:

             如果启动了自动刷新,能够自动刷新:

                PrintStream ps = new PrintStream(new OutputStream(null),true);

                PrintWriter pw = new PrintWriter(new Writer(null),true);

 

六、随机访问流:

      RandomAccessFile类不属于流,是Object类的子类。但是它又融合了InputStreamOutputStream的功能,能对文件的进行随机访问读取和写入。

      特点:

           RandomAccessFile类在一个类中既能读取又能写入,只需要创建一个RandomAccessFile对象就行。

 

七、合并流:

     SequenceInputStream类可以将多个输入流合并为一个输入流,表示其他输入流的逻辑串联。它从输入流的有序集合开始,并从第一个输入流开始读取,直到到达文件末尾,接着从第二个输入流读取,依次类推,直到到达包含的最后一个输入流的文件末尾为止。

 

七、序列化流:

      序列化流:把对象按照流一样的方式存入文本文件或者在网络中传输。

          对象-->流数据  ObjectOutputStream-->父类OutputStream

      反序列化流:把文本文件中的流对象或者网络中的流对象数据还原成对象。

          流数据-->对象  ObjectInputStream-->父类InputStream

 

      特点:

          1、要被序列化或者反序列化的对象,都必须要实现Serializable接口。

          2、被序列化或者反序列化的对象ID地址会随着内容的修改而改变,而实际开发中我们需要保存以前的值,所以就要固定对象ID地址:private static final long serializableUID = xxxL;


 

------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------

0 0
原创粉丝点击