• java IO流 (五) 转换流的使用 以及编码集


    转换流的使用

    1.转换流涉及到的类:属于字符流
    InputStreamReader:将一个字节的输入流转换为字符的输入流
    解码:字节、字节数组 --->字符数组、字符串

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

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


    2.作用:提供字节流与字符流之间的转换

    3.图示:

    4.典型实现:
    
    @Test
        public void test1() throws IOException {
    
            FileInputStream fis = new FileInputStream("dbcp.txt");
    //        InputStreamReader isr = new InputStreamReader(fis);//使用系统默认的字符集
            //参数2指明了字符集,具体使用哪个字符集,取决于文件dbcp.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.print(str);
            }
    
            isr.close();
    
        }
    
    /*
    此时处理异常的话,仍然应该使用try-catch-finally
    
    综合使用InputStreamReader和OutputStreamWriter
     */
    @Test
    public void test2() throws Exception {
        //1.造文件、造流
        File file1 = new File("dbcp.txt");
        File file2 = new File("dbcp_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");
    
        //2.读写过程
        char[] cbuf = new char[20];
        int len;
        while((len = isr.read(cbuf)) != -1){
            osw.write(cbuf,0,len);
        }
    
        //3.关闭资源
        isr.close();
        osw.close();
    
    
    }

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

    编码集

    1.常见的编码表

    ASCII:美国标准信息交换码。
    用一个字节的7位可以表示。
    ISO8859-1:拉丁码表。欧洲码表
    用一个字节的8位表示。
    GB2312:中国的中文编码表。最多两个字节编码所有字符
    GBK:中国的中文编码表升级,融合了更多的中文文字符号。最多两个字节编码
    Unicode:国际标准码,融合了目前人类使用的所字符。为每个字符分配唯一的字符码。所有的文字都用两个字节来表示。
    UTF-8:变长的编码方式,可用1-4个字节来表示一个字符。

    2.对后面学习的启示

    客户端/浏览器端 <----> 后台(java,GO,Python,Node.js,php) <----> 数据库

    要求前前后后使用的字符集都要统一:UTF-8.

  • 相关阅读:
    three.js
    three.js
    three.js
    反射API提供的常用类和函数
    PHP控制反转(IOC)和依赖注入(DI)
    优化思路以及优化过程
    nginx的缓存设置提高性能
    网页内容的压缩编码与传输速度优化
    nginx日志按日期自动切割脚本
    mysql数据备份
  • 原文地址:https://www.cnblogs.com/qiu-hua/p/13196439.html
Copyright © 2020-2023  润新知