zoukankan      html  css  js  c++  java
  • 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
  • 相关阅读:
    python中的归并排序
    使用委派取代继承
    ffmpeg 2.3版本号, 关于ffplay音视频同步的分析
    Java学习之路(转)
    怎样通过terminal得到AWS EC2 instance的ip
    让面试官对你“一见钟情”
    Html5 中获取镜像图像
    架构师速成6.3-设计开发思路
    【转】Android的权限permission
    【转】 Android 基于google Zxing实现对手机中的二维码进行扫描--不错
  • 原文地址:https://www.cnblogs.com/mengxiaoleng/p/14940212.html
Copyright © 2011-2022 走看看