InputStream与InputStreamReader

InputStreamReader上使用InputStream有什么好处,反之亦然。

这里是一个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/ostream数据方面。

他们代表了不同的东西。

InputStream是所有可能的字节stream的祖先类,它本身是没有用的,但是所有的子类(比如你正在使用的FileInputStream )对于处理二进制数据是很好的。

在对应的InputStreamReader (及其父Reader )专门用于处理字符(所以string),所以他们处理字符集编码(utf8,iso-8859-1等)。

简单的答案是:如果你需要二进制数据,你可以使用InputStream (也可以是DataInputStream这样的特定的数据),如果你需要使用InputStreamReader来处理文本。

那么InputStreamReader是用来直接读取字符。

所以阅读他们作为整数,然后转换为字符不是真正的最佳。

这是我相信的主要区别。

InputStream给你的字节, InputStreamReader给你已经是字符,所以它一次读取InputStream 8bits。

另外,如果你正在阅读大块的文本,你甚至可以把InputStreamReader包装到一个BufferedReader ,这个BufferedReader提供了一些很好的方法来让我们一次读完整行。

这帮助你?

干杯,

来自InputStreamReader javadoc:

将字节stream转换为字符stream的类。 从源inputstream中读取的数据通过默认或提供的字符转换器转换为字符。 默认编码取自“file.encoding”系统属性。 InputStreamReader包含从源stream中读取的字节缓冲区,并根据需要将它们转换为字符。

对于实际包含已知编码中的字符的Inp​​utStream,请使用阅读器。 否则,你只是得到的字节,将不得不做手工转换为char'。

两种read方法的区别:

InputStream::read读取单个byte并将其作为int返回,而InputStreamReader::read读取单个char (尊重编码),并将其作为int返回。

如果要使用InputStream读取二进制数据。

如果您想从二进制stream中读取string,请使用InputStreamReader。 它的一个构造函数允许你指定一个字符集。

由于这个原因,不要使用FileReader,因为它使用字符集的平台默认值,在很多情况下,这是不实际的。

InputstreamReader用于读取inputstream中不能读取的Unicode数据。

InputStream帮助我们读取字节stream
InputStreamReader可以帮助用UTF-8或其他字符集将字节stream解码为字符stream。
为了提高效率,Java APIbuild议使用BufferedReader以及InputStreamInputStreamReader