Java InputStream与InputStreamReader
使用Java InputStream与InputStreamReader,java,io,Java,Io,使用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 =
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();
下面是一个使用InputStreamReader的示例(显然是在InputStream的帮助下):
读卡器是否以特殊方式处理数据
我只是想了解一下Java中的整个
i/o
流数据方面。如果您想读取二进制数据,请使用InputStream
如果要从二进制流中读取字符串,请使用InputStreamReader。它的一个构造函数允许您指定字符集
因此,不要使用FileReader,因为它对字符集使用平台默认值,这在许多情况下并不实用。好的
InputStreamReader
用于直接读取字符
因此,将它们读取为int,然后转换为char并不是最理想的
这是我认为的主要区别
InputStream
为您提供字节,而InputStreamReader
为您提供已存在的字符,因此它一次读取InputStream
8个字节
此外,如果您正在阅读大量文本,您甚至可以将InputStreamReader
包装在BufferedReader
中,这为您提供了一些很好的方法,比如说一次阅读整行内容
这对你有帮助吗
您还可以阅读本文:
干杯,它们代表着不同的东西
InputStream
是所有可能的字节流的祖先类,它本身并不有用,但所有子类(如您正在使用的FileInputStream
)都非常适合处理二进制数据
另一方面,InputStreamReader
(及其父级Reader
)专门用于处理字符(因此字符串),因此它们可以优雅地处理字符集编码(utf8、iso-8859-1等)
简单的答案是:如果您需要二进制数据,您可以使用
InputStream
(也可以是像DataInputStream
)这样的特定数据流),如果您需要使用文本,请使用InputStreamReader
。来自InputStreamReader javadoc:
用于将字节流转换为
字符流。从数据库读取的数据
源输入流被转换为
默认字符或默认字符
提供字符转换器。这个
默认编码取自
“file.encoding”系统属性。
{@code InputStreamReader}包含一个
从源读取的字节缓冲区
流并将其转换为
根据需要输入字符
对于实际包含已知编码的字符的InputStreams,请使用读取器。否则,您只能获取字节,并且必须手动将其转换为字符
两种read
方法之间的差异:
InputStream::read
读取单个字节
并将其作为int
返回,而InputStreamReader::read
读取单个字符
(关于编码)并以int
的形式返回该值。InputstreamReader用于读取在inputstream中无法读取的Unicode数据。inputstream帮助我们读取字节流然而,InputStreamReader使用UTF-8或其他字符集帮助将这些字节流解码为字符流。
但是为了提高效率,Java API建议同时使用BufferedReader以及InputStream和InputStreamReader是的,这是有意义的。有没有一种方法可以指定一个缓冲区,使它一次读取超过1字节的数据——比如说,我希望它一次读取1024字节。嗨,如果你使用BufferedReader,你可以根据Javadoc“BufferedReader(Reader in,int sz)”定义缓冲区的大小。然而,对于InputStreamReader,我相信它一次只能准备1个字节。您无法更改此设置。请注意,在构造
InputStreamReader
时,通常最好指定字符集编码。如果不使用它,那么它将选择以正确方式配置的任何编码(如果这是您想要的,那么显式地编写它)。
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();