Java学习笔记之--------IO流之转换流

转换流

字节流转换为字符流,处理乱码(编码集、解码集)。

编码:将字符转换为二进制。

解码:将二进制转换为字符。

乱码的两个可能原因:编码与解码的字符集不统一,字节缺少长度丢失。

有关乱码的问题,Demo如下:

public class ConvertDemo01 {

    public static void main(String[] args) {
        String str = "中国";
        byte[] data = str.getBytes();
        //字节数不完整,会导致输出不正确
        System.out.println(new String(data,0,3));
    }

    /**
     * 编码与解码字符集必须相同
     * @throws UnsupportedEncodingException
     */
    public static void test01() throws UnsupportedEncodingException {
        //解码 byte --> char
        String str = "中国";
        //编码 char --> byte
        byte[] data = str.getBytes();
        //编码与解码字符集统一
        System.out.println(new String(data));
        //设定编码字符集
        data = str.getBytes("gbk");
        System.out.println(new String(data));
        //编码
        byte[] data2 = "中国".getBytes("gbk");
        //解码
        str = new String(data2,"gbk");
        System.out.println(str);
    }

}

test01中,如果编码字符集和解码字符集设置的不相同,则会输出乱码,main方法中,字节数不完整,会导致输出不正确。

下面为文件拷贝的Demo:

/**
 * 转换流:字节转为字符
 * 1.输出流:OutputStreanWriter  编码
 * 2.输入流:InputStreamReader  解码
 */
public class ConvertDemo02 {
    public static void main(String[] args) throws IOException {
        //指定解码字符集
        BufferedReader br = new BufferedReader(
                new InputStreamReader(new FileInputStream(new File("d:/xp/test/Demo03.java")),"utf-8")
                );
        //写出文件
        BufferedWriter bw = new BufferedWriter(
                new OutputStreamWriter(new FileOutputStream(new File("d:/xp/test/char.java")),"utf-8")
        );
        String info = null;
        while (null != (info = br.readLine())){
            System.out.println(info);
        }
        bw.flush();
        br.close();
    }
}

以上为转换流的实例。

猜你喜欢

转载自blog.csdn.net/wangruoao/article/details/83993701