InputStream vs InputStreamReader

2022-08-31 15:48:51

使用 over 有什么好处,反之亦然。InputStreamInputStreamReader

下面是一个实际操作示例:InputStream

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();  

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

只是试图让我了解Java中的整个流数据方面。i/o


答案 1

它们代表了一些不同的东西。

它是所有可能的字节流的祖先类,它本身没有用,但所有子类(就像你正在使用的子类一样)都非常适合处理二进制数据。InputStreamFileInputStream

另一方面,(及其父)专门用于处理字符(因此字符串),因此它们可以优雅地处理字符集编码(utf8,iso-8859-1等)。InputStreamReaderReader

简单的答案是:如果你需要二进制数据,你可以使用一个(也是一个特定的,如一个),如果你需要处理文本,请使用..InputStreamDataInputStreamInputStreamReader


答案 2

井是用来直接读字符的。InputStreamReader

因此,将它们读作int然后转换为char并不是最好的。

这是我认为的主要区别。

InputStream给你字节,给你已经字符,所以它一次读取8位。InputStreamReaderInputStream

此外,如果您正在阅读大块文本,您甚至可以将 它为您提供了一些不错的方法,让我们一次阅读整行。InputStreamReaderBufferedReader

这对你有帮助吗?

您也可以阅读这篇文章:https://docs.oracle.com/javase/tutorial/essential/io/charstreams.html

干杯


推荐