转换流
-
字符转换输入流:InputStreamReader
-
字符转换输出流:OutputStreamWriter
-
继承自Reader
-
转换流是一种高级流,用来包装基本流
-
转换流是字符流和字节流之间的桥梁
- 作用
- 指定字符集读写数据(该方式在JDK11后被淘汰)
- 字节流想要使用字符流中的方法
使用场景
- 利用转换流按照指定字符编码读取(了解,在JDK11被淘汰)
//创建对象并指定字符编码
InputStreamReader isr = new InputStreamReader(new FileInputStream("..."), "GBK");
//读取数据
int ch;
while((ch = isr.read()) != -1) {
System.out.print((char) ch);
}
//释放资源
isr.close();
- JDK11的替代方案
- FileReader添加了新的构造,可以直接传递字符编码
- 在这个方法的底层,调用了父类(InputStreamReader)的构造方法
FileReader fr = new FileReader("...", Charset.forName("GBK"));
- 利用转换流按照指定字符编码写出(了解,在JDK11被淘汰)
//创建转换流的对象
OutputStreamWriter osw = new OutputStreamWriter(new FileOutputStream("..."), "GBK");
//写出数据
osw.write("你好");
//释放资源
osw.close();
- JDK11的替代方案
- FileWriter添加了新的构造,可以直接传递字符编码
- 在这个方法的底层,调用了父类(OutputStreamWriter)的构造方法
FileWriter fw = new FileWriter("...", Charset.forName("GBK"));
- 将本地中的GBK文件,转成UTF-8
InputStreamReader isr = new InputStreamRead(new FileInputStream("..."), "GBK");
OutputStreamWriter osw = new OutputStreamWriter(new FileOutputStream("..."), "UTF-8");
int b;
while((b = isr.read()) != -1) {
osw.write(b);
}
osw.close();
isr.close();
- JDK11替代方案
FileReader fr = new FileReader("...", Charset.forName("GBK"));
FileWriter fw = new FileWriter("...", Charset.forName("UTF-8"));
int b;
while((b = fr.read()) != -1) {
fw.write(b);
}
fw.close();
fr.close();
- 利用字节流读取文件中的数据,每次读取一整行,而且不能出现乱码
InputStreamReader isr = new InputStreamReader(new FileInputStream("..."), "GBK");
BufferedReader br = new BufferedReader(isr);
String line;
while((line = br.readLine()) != null) {
System.out.println(line);
}
br.close();