简介
转换流提供了在字节流和字符流之间的转换
JavaAPI提供了两个转换流:
- InputStreamReader:将InputStream转换为Reader
- OutputStreamWriter:将Writer转换为OutputStream
字节流中的数据都是字符时,转成字符流操作更高效。
很多时候我们使用转换流来处理文件乱码问题。实现编码和解码的功能。
解码:字节、字节数组 ==> 字符数组、字符串
编码:字符数组、字符串 ==> 字节、字节数组
InputStreamReader和OutputStreamWriter都是字符流。
InputStreamReader的使用
测试:
@Test
public void test(){
//指定字符集(根据文本字符集决定)
//字节流转换成字符流
try(InputStreamReader isr = new InputStreamReader(new FileInputStream("hello.txt"), StandardCharsets.UTF_8)){
int len;
char[] cBuf = new char[5];
while((len = isr.read(cBuf)) != -1){
String str = new String(cBuf, 0, len);
System.out.print(str);
}
}catch (IOException e){
e.printStackTrace();
}
}
OutputStreamWriter的使用
下面实现将UTF-8文件转换成gbk文件
@Test
public void test2(){
//指定字符集(根据文本字符集决定)
//字节流转换成字符流
try(InputStreamReader isr = new InputStreamReader(new FileInputStream("hello.txt"), StandardCharsets.UTF_8);
OutputStreamWriter osw = new OutputStreamWriter(new FileOutputStream("hello-gbk.txt"),"gbk")){
int len;
char[] cBuf = new char[5];
while((len = isr.read(cBuf)) != -1){
String str = new String(cBuf, 0, len);
osw.write(str);
}
}catch (IOException e){
e.printStackTrace();
}
}
转换后:hello-gbk.txt用utf8读取就会乱码,需要用gbk读取,如下图
准换为gbk读取后,可以读取