目录
一、概述
1.转换流的作用
提供了在字节流和字符流之间的转换
字节流中的数据都是字符时,转成字符流操作更高效
2.种类
①INputStreamReader
将InputStream转换为Reader(将一个字节的输入流转换为字符的输入流)
②OutputStreamReader
将Writer转换为OutputStream(将一个字符的输出流转换为字节的输出流)
图示
3.编码&解码
①解码
字节、字节数组 ——> 字符数组、字符串
②编码
字符数组、字符串 ——> 字节、字节数组
4.字符集
1.字符编码的由来及常见的编码表
2.UTF-8和Unicode编码的区别
3.Unicode编码
Unicode只是定义了一个庞大、全球通用的字符集,并为每个字符规定了唯一确定的编号,具体存储成什么样的字节流,取决于字符编码方案
二、INputStreamReader的使用
@Test
public void test1() {
InputStreamReader isr = null;
try {
FileInputStream fis = new FileInputStream("abab");
// InputStreamReader isr = new InputStreamReader(fis);//使用系统默认的字符集
//指明了字符集:具体使用哪个字符集,取决于文件abab保存时使用的字符集
isr = new InputStreamReader(fis,"UTF-8");
char[] cbuf = new char[1024];
int len;
while ((len = isr.read(cbuf)) != -1){
String str = new String(cbuf,0,len);
System.out.println(str);
}
} catch (IOException e) {
e.printStackTrace();
} finally {
if(isr != null){
try {
isr.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
三、OutputStreamReader的使用
@Test
public void test2(){
InputStreamReader isr = null;
OutputStreamWriter osw = null;
try {
File file1 = new File("abab");
File file2 = new File("abab_gbk");
FileInputStream fis = new FileInputStream(file1);
FileOutputStream fos = new FileOutputStream(file2);
isr = new InputStreamReader(fis,"utf-8");
osw = new OutputStreamWriter(fos,"gbk");
//读写过程
char[] cbuf = new char[1024];
int len;
while ((len = isr.read(cbuf)) != -1){
osw.write(cbuf,0,len);
}
} catch (IOException e) {
e.printStackTrace();
} finally {
if(isr != null){
try {
isr.close();
} catch (IOException e) {
e.printStackTrace();
}
}
if(osw != null){
try {
osw.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}