[Java][IOstream][转化流]以GBK读取数据用UTF-8写出数据的实例分析

 在这里我们用到了转化流,所谓的转化流也就是实现字节流向字符流的转化。

我们都知道:Java提供了两种基础的字节流

FileInputStream可以让程序读入一个文件的信息

FileOutputStream可以让程序写出一个文件的信息

但是字节流处理的问题过于宏大,我们有时候需要处理一些微观到字符层面的数据。比方说:我们需要改变一个文件的编码。

编码格式纷繁复杂:我们知晓ascii这种支持256个字符的编码,也了解GB2312这种简体中文编码,以及GBK这种兼容性更加完善的汉字编码格式。同时知晓Unicode这种通用性编码,并且了解了UTF-8经常用作汉字的编码

这些编码类型往往集中于字符本身,因此我们想要转化一个含有若干字节的文件编码,就需要先将这些大量的字节变成字符,这个过程就是InputStreamReader

同样的,在程序中以字符的形式处理完这些编码后,我们需要将其进行输出为一个新的文件,我们会以字节流这种方式来高效快速输出,我们将这个输出的过程称为OutputStreamWriter

读到这里,想必你已经知晓了为什么我们在转化流,譬如InputStreamReader的参数里面会new一个FileInputStream 原因就是我们需要把一个字节流放到转化流中来处理

最后,请不要忘记close两种转化流,保证资源的释放

import java.io.*;

public class Main{
    public static void main(String[] args) throws IOException {

        //地址的处理
        String src = "F:\\test\\Information\\Characters\\Male.txt";
        String dest = "F:\\test\\Information\\Characters\\Male_two.txt";
        //转换流对象的创建
        InputStreamReader ipt = new InputStreamReader(new FileInputStream(src),"GBK");
        OutputStreamWriter ips = new OutputStreamWriter(new FileOutputStream(dest),"UTF-8");
        int b;z
        while((b=ipt.read())!=-1){
            ips.write(b);
        }
        ipt.close();
        ips.close();
    }
}

你可能感兴趣的:(java,开发语言)