zoukankan      html  css  js  c++  java
  • InputStream,InputStreamReader和Reader的关系

    InputStream:得到的是字节输入流,InputStream.read("filename")之后,得到字节流

    Reader:读取的是字符流

    InputStreamReader:从字节到字符的桥梁。InputStreamReader(InputStream.read("filename"));

    reader.read(InputStreamReader(InputStream in));便可从字节变为字符,打印显示了。

    java.io.Reader 和 java.io.InputStream 组成了Java 输入类。

    Reader 用于读入16位字符,也就是Unicode 编码的字符;而 InputStream 用于读入 ASCII 字符和二进制数据。

    Reader支持16位的Unicode字符输出,

    InputStream支持8位的字符输出。

    Reader和InputStream分别是I/O库提供的两套平行独立的等级机构,

    1byte = 8bits

    InputStream、OutputStream是用来处理8位元的流,

    Reader、Writer是用来处理16位元的流。

    而在JAVA语言中,byte类型是8位的,char类型是16位的,所以在处理中文的时候需要用Reader和Writer。

    值得说明的是,在这两种等级机构下,还有一道桥梁InputStreamReader、OutputStreamWriter负责进行InputStream到Reader的适配和由OutputStream到Writer的适配。

    在 Java中,有不同类型的 Reader 输入流对应于不同的数据源:

    FileReader 用于从文件输入; CharArrayReader 用于从程序中的字符数组输入; StringReader 用于从程序中的字符串输入; PipedReader 用于读取从另一个线程中的 PipedWriter 写入管道的数据。

    相应的也有不同类型的 InputStream 输入流对应于不同的数据源:FileInputStream,ByteArrayInputStream,StringBufferInputStream,PipedInputStream。

    另外,还有两种没有对应 Reader 类型的 InputStream 输入流: Socket 用于套接字; URLConnection 用于 URL 连接。 这两个类使用 getInputStream() 来读取数据。

    相应的,java.io.Writer 和 java.io.OutputStream 也有类似的区别。

     关于InputStream.read(byte[] b)和InputStream.read(byte[] b,int off,int len)这两个方法都是用来从流里读取多个字节的,有经验的程序员就会发现,这两个方法经常 读取不到自己想要读取的个数的字节。比如第一个方法,程序员往往希望程序能读取到b.length个字节,而实际情况是,系统往往读取不了这么多。仔细阅 读Java的API说明就发现了,这个方法 并不保证能读取这么多个字节,它只能保证最多读取这么多个字节(最少1个)。因此,如果要让程序读取count个字节,最好用以下代码:
      byte[] b = new byte[count];
      int readCount = 0; // 已经成功读取的字节的个数
      while (readCount < count) {
       readCount += in.read(bytes, readCount, count - readCount);
      }
          用这段代码可以保证读取count个字节,除非中途遇到IO异常或者到了数据流的结尾(EOFException)

  • 相关阅读:
    纹理作用于栅格建模
    Blender模拟全局照明的简单方法
    材质组合卡通眼球
    Blender 曲线操作
    材质纹理的初级示例
    Quick Noodle Physics in Blender Tutorial
    Blender简单动画:一个小球从一座山上滚下.
    PostgreSQL的目录结构及修改数据目录
    PostgreSQL的配置文件
    CentOS7安装PostgreSQL10,pgadmin4
  • 原文地址:https://www.cnblogs.com/jsStudyjj/p/5331811.html
Copyright © 2011-2022 走看看