📅  最后修改于: 2023-12-03 15:31:30.869000             🧑  作者: Mango
在Java中,InputStreamReader是一个用于将字节流转换为字符流的Bridge流。
InputStreamReader根据指定的字符集,将InputStream中的字节转换为字符流。它可以将字节流转换为字符流,这类情况经常出现在(例如)从文件或网络中读取数据时。
使用InputStreamReader类,必须创建一个InputStreamReader对象,通常使用下面的构造函数来创建:
InputStreamReader isr = new InputStreamReader(InputStream in);
InputStreamReader isr = new InputStreamReader(InputStream in, String charsetName);
第一个构造函数将使用默认字符集将字节流转换为字符流,而第二个构造函数使用指定的字符集将字节流转换为字符流。
一旦你创建了一个InputStreamReader对象,你可以用read()方法从InputStream中读取字符:
char singleChar = (char) isr.read();
如果需要读取多个字符,可以使用以下方法:
int numCharsRead;
char[] charBuffer = new char[4096];
while ((numCharsRead = isr.read(charBuffer)) > 0) {
// process the characters read
}
charBuffer数组定义了读取字符的缓存区大小。
与任何其它I/O类的对象一样,当不再需要InputStreamReader时,请记得关闭它,否则会有内存泄漏的可能。
isr.close();
以下示例使用InputStreamReader从标准输入读取字符,并将这些字符写入标准输出。
import java.io.*;
public class InputStreamReaderExample {
public static void main(String[] args) throws IOException {
InputStreamReader isr = new InputStreamReader(System.in);
char[] charBuffer = new char[128];
int numCharsRead;
while ((numCharsRead = isr.read(charBuffer)) > 0) {
System.out.print(new String(charBuffer, 0, numCharsRead));
if (charBuffer[numCharsRead - 1] == '\n') {
break;
}
}
isr.close();
}
}
InputStreamReader是一个将字节流转换为字符流的Bridge流。除非你知道自己在做什么,否则你应该始终使用指定字符集的构造函数,并确保在使用它完后关闭它。