• IO OutputStreamWriter和InputStreamReader


    因为FileWriter和FileReader构造方法都是声明: 假定默认字符编码GBK和默认字节缓冲区大小都是可接受的。要自己指定这些值,可以先在 FileOutputStream 上构造一个 OutputStreamWriter,所以如果想改变读取或者写入某文件的编码方式,需要用到OutputStreamWriter和InputStreamReader。

    OutputStreamWriter

      是字符流通向字节流的桥梁:使用指定的 charset 将要向其写入的字符编码为字节。它使用的字符集可以由名称指定或显式给定,否则可能接受平台默认的字符集。每次调用 write() 方法都会针对给定的字符(或字符集)调用编码转换器。在写入基础输出流之前,得到的这些字节会在缓冲区累积。可以指定此缓冲区的大小,不过,默认的缓冲区对多数用途来说已足够大。注意,传递到此 write() 方法的字符是未缓冲的。为了达到最高效率,可考虑将 OutputStreamWriter 包装到 BufferedWriter 中以避免频繁调用转换器。

    构造函数

      OutputStreamWriter(OutputStream out) 创建使用默认字符编码的 OutputStreamWriter。 
      OutputStreamWriter(OutputStream out, Charset cs) 创建使用给定字符集的 OutputStreamWriter。 
      OutputStreamWriter(OutputStream out, CharsetEncoder enc) 创建使用给定字符集编码器的 OutputStreamWriter。 
      OutputStreamWriter(OutputStream out, String charsetName) 创建使用指定字符集的 OutputStreamWriter。charsetName:GBK,UTF-8可选

    特有方法

      String getEncoding() 返回此流使用的字符编码的名称

    InputStreamReader

      是字节流通向字符流的桥梁:它使用指定的 charset 读取字节并将其解码为字符。它使用的字符集可以由名称指定或显式给定,否则可能接受平台默认的字符集。

    每次调用 InputStreamReader 中的一个 read() 方法都会导致从基础输入流读取一个或多个字节。要启用从字节到字符的有效转换,可以提前从基础流读取更多的字节,使其超过满足当前读取操作所需的字节。

    构造函数

      InputStreamReader(InputStream in) 创建一个使用默认字符集的 InputStreamReader。 
      InputStreamReader(InputStream in, Charset cs) 创建使用给定字符集的 InputStreamReader。 
      InputStreamReader(InputStream in, CharsetDecoder dec) 创建使用给定字符集解码器的 InputStreamReader。 
      InputStreamReader(InputStream in, String charsetName) 创建使用指定字符集的 InputStreamReader。

    特有方法

    String getEncoding() 返回此流使用的字符编码的名称。

    指定编码读写文件

      windows操作系统默认的是gbk的编码,gbk编码中文时一个中文占2个字节,而utf-8编码时一个中文占3个字节,所以如果用FileReader去读utf-8编码的文件就会出现乱码的情况,因为FileReader读取的编码时默认的操作系统gbk的编码去读取的,而且无法更改编码类型,这时候就要用到InputStreamReader这个转换流了。FileWriter和InputStreamWriter也是这个情况

    读文件

    public static void readerType() throws IOException{
        FileInputStream fis = new FileInputStream("F:\utf.txt");//utf-8编码的文件
        InputStreamReader isr = new InputStreamReader(fis,"utf-8");
        
        FileInputStream fis = new FileInputStream("F:\gbk.txt");//gbk编码的文件
        InputStreamReader isr = new InputStreamReader(fis);//默认gbk编码
        
        char[] ch = new char[1024];
        
        int len = isr.read(ch);
        
        System.out.println(new String(ch,0,len));
        isr.close();
    }

    写文件

    public static void writerType() throws IOException{
            
        FileOutputStream fos = new FileOutputStream("F:\utf.txt");
        OutputStreamWriter osw = new OutputStreamWriter(fos,"utf-8");
        
        FileOutputStream fos = new FileOutputStream("F:\gbk.txt");
        OutputStreamWriter osw = new OutputStreamWriter(fos);//默认gbk不用指定
        
        osw.write("你好");
        
        osw.close();
    }
  • 相关阅读:
    Win10 JDK 配置
    Java Selenium
    Java Selenium
    Eclipse配置Github -分享你的代码
    TestNG-详解preserve-order的作用与测试case的执行顺序
    Java
    VirtualBox 在Win10上的蓝屏问题
    SQL _ Create Procedure
    LINQ 学习路程 -- 查询语法 LINQ Query Syntax
    LINQ 学习路程 -- 开篇
  • 原文地址:https://www.cnblogs.com/ms-grf/p/7268175.html
Copyright © 2020-2023  润新知