zoukankan      html  css  js  c++  java
  • java基础:IO流之转换流

    简介

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

    JavaAPI提供了两个转换流:

    • InputStreamReader:将InputStream转换为Reader
    • OutputStreamWriter:将Writer转换为OutputStream

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

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

    image-20210423093829206

    解码:字节、字节数组 ==> 字符数组、字符串

    编码:字符数组、字符串 ==> 字节、字节数组

    InputStreamReader和OutputStreamWriter都是字符流。

    InputStreamReader的使用

    测试:

        @Test
        public void test(){
            //指定字符集(根据文本字符集决定)
            //字节流转换成字符流
            try(InputStreamReader isr = new InputStreamReader(new FileInputStream("hello.txt"), StandardCharsets.UTF_8)){
                int len;
                char[] cBuf = new char[5];
                while((len = isr.read(cBuf)) != -1){
                    String str = new String(cBuf, 0, len);
                    System.out.print(str);
                }
            }catch (IOException e){
                e.printStackTrace();
            }
        }
    

    OutputStreamWriter的使用

    下面实现将UTF-8文件转换成gbk文件

        @Test
        public void test2(){
            //指定字符集(根据文本字符集决定)
            //字节流转换成字符流
            try(InputStreamReader isr = new InputStreamReader(new FileInputStream("hello.txt"), StandardCharsets.UTF_8);
                OutputStreamWriter osw = new OutputStreamWriter(new FileOutputStream("hello-gbk.txt"),"gbk")){
                int len;
                char[] cBuf = new char[5];
                while((len = isr.read(cBuf)) != -1){
                    String str = new String(cBuf, 0, len);
                    osw.write(str);
                }
            }catch (IOException e){
                e.printStackTrace();
            }
        }
    

    转换后:hello-gbk.txt用utf8读取就会乱码,需要用gbk读取,如下图

    image-20210423103211400

    准换为gbk读取后,可以读取

    image-20210423104852507

  • 相关阅读:
    项目笔记:统计页面功能实现
    jquery easyui datagrid实现数据改动
    Skia图片解码模块流程分析
    TRIZ的成功案例
    基于HTML5的Web SCADA工控移动应用
    webservices系列(五)——javaweb整合Axis2及多service配置
    org.hibernate.PropertyValueException: not-null property references a null or transient value: model.
    线程池和异步线程
    [leetcode]Implement strStr()
    Python工作日类库Busines Holiday介绍
  • 原文地址:https://www.cnblogs.com/wwjj4811/p/14692798.html
Copyright © 2011-2022 走看看