java InputStreamReader 类

说明

InputStreamReader 是从字节流到字符流的桥梁:读取字节,并使用指定的 charset 将其 解码为字符

如果不指定字符集,用平台的默认字符集。操作系统默认字符集:

  • windows10、linux、macos,默认字符集是 UTF-8
  • windows8以前,默认字符集是 GBK

构造方法

创建一个使用默认字符集的InputStreamReader:

InputStreamReader(InputStream in)

创建一个使用给定字符集的InputStreamReader:

InputStreamReader(InputStream in, Charset cs)

创建一个使用命名字符集的InputStreamReader:

InputStreamReader(InputStream in, String charsetName)

易发生错误

调用 read() 方法,可能会发生转换失败

如:读取 含有中文内容的文件,该文件是 UTF-8 编码,也就是说需要 2-3字节 才能 转换中文,当 读取1个字节就开始转换时,就会导致 转换失败

解决

为了使字节有效地转换为字符,可以用 BufferedReader 缓冲流:

String file = "D:\\java\\util\\src\\main\\java\\top\\malaoshi\\util\\MapUtil.java";
FileInputStream fis = new FileInputStream(file);;
InputStreamReader isr = new InputStreamReader(fis,"utf-8");
BufferedReader br = new BufferedReader(isr);

然后用 BufferedReaderreadLine() 方法读取一行

例子

String file = "D:\\java\\util\\src\\main\\java\\top\\malaoshi\\util\\MapUtil.java";
FileInputStream fis = new FileInputStream(file);;
InputStreamReader isr = new InputStreamReader(fis,"utf-8");
BufferedReader br = new BufferedReader(isr);

String line=null;

while( (line = br.readLine()) != null){
    System.out.println(line);
}
//先打开的后关闭
br.close();
isr.close();
fis.close();

原文出处:http://malaoshi.top/show_1IX37UrR8EDu.html