在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(); Reader是否以特殊的方式处理数据?
我只是想用Java语言来理解整个i/o流数据方面。
发布于 2010-07-07 21:12:39
它们代表了一些不同的东西。
InputStream是所有可能字节流的祖先类,它本身并不有用,但所有子类(如您正在使用的FileInputStream )对于处理二进制数据都很有用。
另一方面,InputStreamReader (及其父Reader)专门用于处理字符(so字符串),因此它们可以很好地处理字符集编码(utf8、iso-8859-1等)。
简单的答案是:如果需要二进制数据,可以使用InputStream (也可以是特定的,如DataInputStream),如果需要处理文本,可以使用InputStreamReader。
发布于 2010-07-07 21:10:47
InputStreamReader是用来直接读取字符的。
因此,将它们读取为int,然后转换为char并不是真正的最佳选择。
这是我相信的主要区别。
InputStream给你字节,InputStreamReader给你已经给你的字符,所以它一次读取InputStream 8位。
此外,如果您正在阅读大段文本,您甚至可以将InputStreamReader包装在BufferedReader中,它为您提供了一些很好的方法,比如说一次读取整行。
这对你有帮助吗?
你也可以阅读这篇文章:https://docs.oracle.com/javase/tutorial/essential/io/charstreams.html
干杯,
发布于 2010-07-07 21:14:22
从InputStreamReader javadoc:
将字节流转换为字符流的类。从源输入流读取的数据由默认或提供的字符转换器转换成字符。默认编码取自"file.encoding“系统属性。{@code InputStreamReader}包含从源流读取的字节缓冲区,并根据需要将这些字节转换为字符。
对于实际包含已知编码的字符的InputStreams,请使用阅读器。否则,你只能获取字节数,并且必须“手动”转换为char。
这两种read方法的区别是:
InputStream::read读取单个byte并将其作为int返回,而InputStreamReader::read读取单个char (遵循编码)并将其作为int返回。
https://stackoverflow.com/questions/3194918
复制相似问题