1. 转换流涉及到的类:属于字符流

InputStreamReader:将一个字节的输入流转换为字符的输入流 解码:字节、字节数组 —->字符数组、字符串

OutputStreamWriter:将一个字符的输出流转换为字节的输出流 编码:字符数组、字符串 —-> 字节、字节数组

说明:编码决定了解码的方式

2. 作用

提供字节流与字符流之间的转换

3. 图示

image.png

4. 典型实现

  1. @Test
  2. public void test1() throws IOException {
  3. FileInputStream fis = new FileInputStream("dbcp.txt");
  4. // InputStreamReader isr = new InputStreamReader(fis);//使用系统默认的字符集
  5. //参数2指明了字符集,具体使用哪个字符集,取决于文件dbcp.txt保存时使用的字符集
  6. InputStreamReader isr = new InputStreamReader(fis,"UTF-8");//使用系统默认的字符集
  7. char[] cbuf = new char[20];
  8. int len;
  9. while((len = isr.read(cbuf)) != -1){
  10. String str = new String(cbuf,0,len);
  11. System.out.print(str);
  12. }
  13. isr.close();
  14. }
  1. /*
  2. 此时处理异常的话,仍然应该使用try-catch-finally
  3. 综合使用InputStreamReader和OutputStreamWriter
  4. */
  5. @Test
  6. public void test2() throws Exception {
  7. //1.造文件、造流
  8. File file1 = new File("dbcp.txt");
  9. File file2 = new File("dbcp_gbk.txt");
  10. FileInputStream fis = new FileInputStream(file1);
  11. FileOutputStream fos = new FileOutputStream(file2);
  12. InputStreamReader isr = new InputStreamReader(fis,"utf-8");
  13. OutputStreamWriter osw = new OutputStreamWriter(fos,"gbk");
  14. //2.读写过程
  15. char[] cbuf = new char[20];
  16. int len;
  17. while((len = isr.read(cbuf)) != -1){
  18. osw.write(cbuf,0,len);
  19. }
  20. //3.关闭资源
  21. isr.close();
  22. osw.close();
  23. }

5. 说明

文件编码的方式(比如:GBK),决定了解析时使用的字符集(也只能是GBK)。