JavaSE进阶
13.2.5 转换流
转换流
- 转换流提供了在字节流和字符流之间的转换
- Java API提供了两个转换流:
- InputStreamReader和OutputStreamWriter
- 字节流中的数据都是字符时,转成字符流操作更高效。
InputStreamReader
- 用于将字节流中读取到的字节按指定字符集解码成字符。需要和InputStream“套接”。
- 构造方法
- public InputStreamReader(InputStream in)
- public InputSreamReader(InputStream in,String charsetName)
如: Reader isr = new
InputStreamReader(System.in,”gb2312”);
OutputStreamWriter
- 用于将要写入到字节流中的字符按指定字符集编码成字节。需要和OutputStream“套接”。
- 构造方法
- public OutputStreamWriter(OutputStream out)
- public OutputSreamWriter(OutputStream out,String charsetName)
public void testMyInput() throws Exception{
FileInputStream fis = new FileInputStream("dbcp.txt");
FileOutputStream fos = new FileOutputStream("dbcp5.txt");
InputStreamReader isr = new InputStreamReader(fis,"GBK");
OutputStreamWriter osw = new OutputStreamWriter(fos,"GBK");
BufferedReader br = new BufferedReader(isr);
BufferedWriter bw = new BufferedWriter(osw);
String str = null;
while((str = br.readLine()) != null){
bw.write(str);
bw.newLine();
bw.flush();
}
bw.close();
br.close();
}
补充:字符编码
- 编码表的由来
计算机只能识别二进制数据,早期由来是电信号。为了方便应用计算机,让它可以识别各个国家的文字。就将各个国家的文字用数字来表示,并一一对应,形成一张表。这就是编码表。
- 常见的编码表
- ASCII:美国标准信息交换码。
- 用一个字节的7位可以表示。
- ISO8859-1:拉丁码表。欧洲码表
- 用一个字节的8位表示。
- GB2312:中国的中文编码表。
- GBK:中国的中文编码表升级,融合了更多的中文文字符号。
- Unicode:国际标准码,融合了多种文字。
- 所有文字都用两个字节来表示,Java语言使用的就是unicode
- UTF-8:最多用三个字节来表示一个字符
- 编码:字符串à字节数组
- 解码:字节数组à字符串
- 转换流的编码应用
- 可以将字符按指定编码格式存储。
- 可以对文本数据按指定编码格式来解读。
- 指定编码表的动作由构造函数完成。