代码之家  ›  专栏  ›  技术社区  ›  xil3

输入流与输入流读卡器

  •  53
  • xil3  · 技术社区  · 15 年前

    使用的好处是什么 InputStream 结束 InputStreamReader 反之亦然。

    下面是一个例子 输入流 行动中:

    InputStream input = new FileInputStream("c:\\data\\input-text.txt");
    
    int data = input.read();
    while(data != -1) {
      //do something with data...
      doSomethingWithData(data);
    
      data = input.read();
    }
    input.close();
    

    下面是一个使用inputstreamreader的示例(显然在inputstream的帮助下):

    InputStream inputStream = new FileInputStream("c:\\data\\input.txt");
    Reader      reader      = new InputStreamReader(inputStream);
    
    int data = reader.read();
    while(data != -1){
        char theChar = (char) data;
        data = reader.read();
    }
    
    reader.close();  
    

    读卡器是否以特殊方式处理数据?

    只是想把我的头转过来 i/o Java中的流数据方面。

    6 回复  |  直到 15 年前
        1
  •  80
  •   Ojonugwa Jude Ochalifu Dave    7 年前

    它们代表一些不同的事物。

    这个 InputStream 是所有可能的祖先类吗? 溪流 对于字节,它本身并不有用,而是所有子类(如 FileInputStream 您使用的)是处理二进制数据的好方法。

    另一方面, InputStreamReader (和它的父亲) Reader )专门用于处理字符(so字符串),因此它们可以优雅地处理字符集编码(utf8、iso-8859-1等)。

    简单的答案是:如果需要二进制数据,可以使用 输入流 (也是一个特殊的,比如 DataInputStream ,如果需要使用文本,请使用 输入流阅读器

        2
  •  26
  •   Community CDub    7 年前

    InputStreamReader 用于直接读取字符。

    所以把它们读成int然后转换成char并不是最佳的。

    这就是我认为的主要区别。

    InputStream 给你字节,和 输入流阅读器 已经给了你字符,所以它显示 输入流 每次8次。

    此外,如果你正在阅读大段的文本,你甚至可以将 输入流阅读器 在一个 BufferedReader 这为你提供了一些很好的方法,比如一次阅读整行。

    这能帮你吗?

    您还可以阅读本文: https://docs.oracle.com/javase/tutorial/essential/io/charstreams.html

    干杯,

        3
  •  9
  •   Andreas Dolk    15 年前

    从inputstreamreader javadoc:

    用于将字节流转换为 字符流。从中读取数据 源输入流转换为 默认字符或 提供字符转换器。这个 默认编码取自 “file.encoding”系统属性。 @code inputstreamreader包含 从源读取的字节缓冲区 流并将其转换为 需要的字符。

    对于实际包含已知编码中的字符的输入流,请使用读卡器。否则,您只需获取字节,并将不得不进行“手工”到char的转换。

    两者的区别 read 方法:

    InputStream::read 读单 byte 并将其作为 int 虽然 InputStreamReader::read 读单 char (关于编码)并将其作为 int .

        4
  •  5
  •   Alexander Pogrebnyak    15 年前

    如果要读取二进制数据,请使用inputstream。

    如果要从二进制流读取字符串,请使用inputstreamreader。它的一个构造函数允许您指定一个字符集。

    因此,不要使用FileReader,因为它对字符集使用平台默认值,这在许多情况下是不实际的。

        5
  •  2
  •   AbSak-The Humble Learner    10 年前

    输入流 帮助我们读取字节流
    反之 输入流阅读器 帮助使用一些字符集(如utf-8或其他字符集)将这些字节流解码为字符流。
    但是 为了提高效率,建议使用Java API 缓冲区读取 也随着 输入流 输入流阅读器

        6
  •  1
  •   Asthme    11 年前

    inputstreamreader用于读取在inputstream中无法读取的Unicode数据。