使用InputStream结束的好处是什么InputStreamReader,反之亦然.
这是一个实际的例子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();
Run Code Online (Sandbox Code Playgroud)
这是一个使用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();
Run Code Online (Sandbox Code Playgroud)
Reader是否以特殊方式处理数据?
试着让我了解i/oJava中的整个流数据方面.
Jac*_*ack 84
它们代表了不同的东西.
它InputStream是所有可能的字节流的祖先类,它本身没有用,但是所有子类(就像FileInputStream你正在使用的那样)都非常适合处理二进制数据.
另一方面,InputStreamReader(及其父Reader)专门用于处理字符(因此字符串),因此它们优雅地处理字符集编码(utf8,iso-8859-1等).
简单的答案是:如果你需要二进制数据,你可以使用InputStream(也是一个特定的一个DataInputStream),如果你需要使用文本使用InputStreamReader...
Tre*_*fex 27
好InputStreamReader用于直接读取字符.
因此将它们作为int读取然后转换为char并不是最佳选择.
这是我认为的主要区别.
InputStream给你字节,并InputStreamReader给你已经字符,所以它一次读取8 InputStream位.
另外,如果您正在阅读大块文本,您甚至可以将其包装InputStreamReader在一个BufferedReader为您提供一些不错的方法,让我们一次读取整行.
这有助于你吗?
您还可以阅读这篇文章:https://docs.oracle.com/javase/tutorial/essential/io/charstreams.html
干杯,
来自InputStreamReader javadoc:
用于将字节流转换为字符流的类.从源输入流读取的数据通过默认或提供的字符转换器转换为字符.默认编码取自"file.encoding"系统属性.{@code InputStreamReader}包含从源流读取的字节缓冲区,并根据需要将这些字节转换为字符.
对于实际包含已知编码中的字符的InputStream,请使用阅读器.否则你只需要获得字节,并且必须手动转换为char'.
两种read方法的区别:
InputStream::read读取单个byte并返回它作为intwhile InputStreamReader::read读取单个char(尊重编码)并将其作为返回int.
如果要读取二进制数据,请使用InputStream.
如果要从二进制流中读取字符串,请使用InputStreamReader.其中一个构造函数允许您指定字符集.
因此,不要使用FileReader,因为它使用字符集的平台默认值,在许多情况下,这是不实际的.
| 归档时间: |
|
| 查看次数: |
64115 次 |
| 最近记录: |