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
  • 相关阅读:
    webpack devServer配置项的坑
    app混合开发 fastlick.js 在ios上 input标签点击 不灵敏 处理
    vue 学习八 自定义指令
    Verilog数值大小比较
    Verilog实现Matlab的fliplr函数
    基本不等式
    如何读取ila数据
    Xilinx FPGA时钟IP核注意事项
    FPGA Turbo译码器注意事项
    EbN0转SNR
  • 原文地址:https://www.cnblogs.com/mengxiaoleng/p/14940212.html
Copyright © 2011-2022 走看看