• Java-IO流系列-转换流


    转换流

    什么是转换流

    转换流提供了在字节流和字符流之间的转换

    Java API提供了两个转换流:

    • InputStreamReader: 将InputStream转换为Reader

    • OutputStreamWriter:将Writer转换为OutputStream

    • 字节流中的数据都是字符时,转成字符流操作更高效。

    • 很多时候我们使用转换流来处理文件乱码问题。实现编码和解码的功能

    image-20210118164121878

    转换流的使用

    输入流

    1. 转换流:

      • InputStreamReader:将- -个字节的输入流转换为字徒的输入流
      • outputstreamwriter:将-一个字符的输出流转换为字节的输出流
    2. 作用:提供字节流与字符流之间的转换

    3. 编码与解码

      • 解码:字节、字节数组--->字符数组、 字符串
      • 编码:字符数组、字符串--->字节,字节数组
    4. InputStreamReader的参数2指明了字符集,具体使用哪个字符集,取决于文件test.txt保存时使用的字符集
      InputStreamReader默认是系统的编码
      
    5. 注意此时仍应该用try-catch块

    package com.dreamcold.io;
    
    import java.io.FileInputStream;
    import java.io.IOException;
    import java.io.InputStreamReader;
    
    public class Demo12 {
        public static void main(String[] args) throws IOException {
            FileInputStream fis=new FileInputStream("test.txt");
            InputStreamReader isr=new InputStreamReader(fis,"UTF-8");
            char[] cbuf=new char[20];
            int len;
            while ((len=isr.read(cbuf))!=-1){
                String str=new String(cbuf,0,len);
                System.out.println(str);
            }
            isr.close();
    
        }
    }
    
    1. 结果如下:
    image-20210118170030325

    综合使用InputStreamReader和utputstreamWriter

    package com.dreamcold.io;
    
    
    import java.io.*;
    
    public class Demo13 {
        public static void main(String[] args) throws IOException {
            File file1=new File("test.txt");
            File file2=new File("test2-gbk.txt");
    
            FileInputStream fis=new FileInputStream(file1);
            FileOutputStream fos=new FileOutputStream(file2);
    
            InputStreamReader isr=new InputStreamReader(fis,"UTF-8");
            OutputStreamWriter osw=new OutputStreamWriter(fos,"GBK");
    
            char[] buf=new char[10];
            int len;
            while ((len=isr.read(buf))!=-1){
                osw.write(buf,0,len);
            }
    
            isr.close();
            osw.close();
        }
    }
    

    效果:

    image-20210118171423161
  • 相关阅读:
    团队开发冲刺第二十天
    团队开发冲刺第十九天
    第十六周进度总结
    学期课后个人总结
    用户场景分析
    第十五周进度总结
    对正在使用的输入法进行评价
    java中实现客户姓名添加和显示
    指定查找区间,查找学生姓名并显示是否修改成功
    linux下如何修改文件的权限chmod
  • 原文地址:https://www.cnblogs.com/mengxiaoleng/p/14940212.html
Copyright © 2020-2023  润新知