• Java的IO输入输出流类的介绍(有图)


    一.字节流

      1.InputStream/OutputStream(输入流与输出流几乎一一对应)

       读取的方法
       int read()
       int read(byte[] buffer)
       int read(byte[] buffer,int offset,int length)

      2.各种类的区分,常用的9种(按处理的基本单位划分)

         2.1.以字节数组为颗粒(颗粒就是基本单位的意思)

                 ByteArrayInputStream

         2.2.以文件为颗粒

                 FileInputStream

         2.3.管道流(接水管)

                 PipedInputStream,

                 主要用在多线程中线程间通信,一个线程通过管道输出流发送数据,

                 而另一个线程通过管道输入流读取数据,这样可实现两个线程间的通讯。

          2.4.以字符串为基本单位(但已经不推荐使用)

                StringBufferInputStream

          2.5.把流合并的特殊流(只有输入流才有,输出流没有对应的类)

                  SequenceInputStream :把多个 InputStream 合并为一InputStream .

                   “序列输入流”类允许应用程序把几个输入流连续地合并起来,并且使它们像单个输入流一样出现。

                    每个输入流依次被读取,直到到达该流的末尾。

                    然后“序列输入流”类关闭这个流并自动地切换到下一个输入流。

          2.6.增强流(过滤流)

                     FilterInputStream 

          2.7.缓冲流

              BufferedInputStream(继承于FilterInputStream)

          2.8.打印流

              注意:printStream也是继承了FilterInputStream,所以它可以对输入进行格式化

          2.9.以对象为颗粒的

                ObjectInputStream
      

           附:InputStream,OutputStream类的继承关系图:

              

                 and:

              
    *********************************************************

      二、字符流

        1.Reader/Writer:虽然是以字符为单位,

             但返回的是字符对应的ASCII码,也就是int类型的数字

           对应方法:
          int read()
          int read(char[] buffer)
          int read(char[] buffer,int offset,int length)

          Writer的方法,比较特殊,增加了2个:
          void write(int c)
          void write(char[] cbuf)
          void write(char[] cbuf,int offset,int length)

          void write(String string)//字符串跟字符数组关系很紧密
          void write(String string,int offset,int length)

       2.各种类的区分,常用的9种(按处理的基本单位划分)

           2.1.以字符(char)数组为颗粒的

                 CharArrayReader(与ByteArrayInputStream对应,一个是字符数组,一个是字节数组)

          2.2.以文件为颗粒

                 FileReader(与FileIputStream对应,不过父类层次不同,FileReader是转换流InputStreamReader的子类,因为内部有字符的转换过程)

          2.3.特殊的转换流(输入时,字节转字符;输出时,字符转字节)

                 InputStreamReader(FileReader就是继承了它)

         2.4.管道流

                PipedReader(与PipedInputStream对应)

         2.5.字符流

              StringReader(与StringBufferInputStream对应)

         2.6.增强流(过滤流)

              FilterReader

         2.7.缓冲流

              BufferedReader(与BufferedInputStream对应,不过不是继承FilterReader)

         2.8.打印流(既然是打印,当然只有输出流才有)

             PrintWriter

         2.9.以对象为颗粒的

             ObjectReader(与ObjectInputStream对应)

    **************特别提醒,两个转换流********************
    InputStreamReader(字节到字符)和 OutputStreamReader(字符到字节):

    1.InputStreamReader

         从字节流到字符流的桥梁:它读入字节,并根据指定的编码方式,将之转换为字符流。

        使用的编码方式可能由名称指定,或平台可接受的缺省编码方式
        InputStreamReader的read()方法之一的每次调用,可能促使从基本字节输入流中读取一个或多个字节。

        为了达到更高效率,考虑用 BufferedReader 封装 InputStreamReader,
        如:
        BufferedReader in = new BufferedReader(new InputStreamReader(System.in));

    2.OutputStreamWriter

      将多个字符写入到一个输出流,根据指定的字符编码将多个字符转换为字节
      每个 OutputStreamWriter 合并它自己的 CharToByteConverter, 因而是从字符流到字节流的桥梁。

      附上:字符流Reader,Writer的类继承关系图:

       

        and:

          



  • 相关阅读:
    [Real World Haskell翻译]第24章 并发和多核编程 第一部分并发编程
    [Real World Haskell翻译]第22章 扩展示例:Web客户端编程
    [Real World Haskell翻译]第27章 网络通信和系统日志 Sockets and Syslog
    druid 解密
    git clone 所有远程分支到本地
    十、Delphi 把Json转成Delphi实体类
    XML External Entity attack/XXE攻击
    大家好!
    XXE攻防——XML外部实体注入
    ubuntu安装Go环境
  • 原文地址:https://www.cnblogs.com/tommy-huang/p/4322558.html
Copyright © 2020-2023  润新知