欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Java 字节流、字符流和转换流之间的关系

程序员文章站 2024-03-07 08:10:08
...

1. 字节流、字符流和转换流之间的关系

(1)字节流:读取字节到内存或将字节写入硬盘文件中。

(2)字符流:将字节转换为字符(读入)或将字符转换为字节(写出)。

(3)转换流:将字节按照指定的编码格式转换为字符(读入),或将字符按照指定的编码格式转换为字节(写出),字节(字符)通向字符(字节)的桥梁。

2.说明

Java 字节流、字符流和转换流之间的关系

        上图中,硬盘中文件1.txt中有文字【你好】,如果编码格式为GBK,则存储的字节个数为4个,利用字节输入流FileInputStream将字节读取到字符流缓冲区,FileReader字符流会依据工作环境IDEA的编码格式对读取的字节进行解码,然后IDEA的编码格式为UTF-8,则会出现乱码。如果使用转换流InputStreamReader将字节转换为字符,该转换流可以使用默认的编码或者指定的编码格式,进而保证解码的准确性,最终读入内存。

Java 字节流、字符流和转换流之间的关系

        上图中,将内存中的【你好】写出到硬盘文件1.txt中,使用字符输出流FileWriter时,该字符流会将你好按照IEDA的默认编码格式UTF-8将字符转换为字节,存入缓冲区,之后利用FileOutputStream字节流,将缓冲区内容写出到文件中,此时文件内容的编码格式会默认为UTF-8。如果使用OutputStreamWriter转换流可以使用指定的编码格式将字符转换为字节,之后利用字节流将字节写入文件。

3.案例

(1)输出转换流案例:

/**
 * OutputStreamWriter转换流
 * (1)OutputStreamWriter(OutputStream out);使用默认编码格式,将字符编码成字节
 * (2)OutputStreamWriter(OutputStream out,String charsetName);使用指定编码格式,将字符编码成字节
 */
private static void osw01() throws Exception {
    OutputStream os = new FileOutputStream("E:\\kankan\\1.txt");
    OutputStreamWriter osw = new OutputStreamWriter(os, "utf-8");
    osw.write("你好");
    osw.flush();
    osw.close();
}

(2)输入转换流案例:

 /*
 * InputStreamReader转换流
 * (1)InputStreamReader(InputStream in);使用默认的编码格式,将字节转换为字符
 * (2)InputStreamReader(InputStream in,String charsetName);使用指定编码格式,将字节转换为字符
 */
private static void isr01() throws IOException {
    InputStream is = new FileInputStream("E:\\kankan\\1.txt");
    InputStreamReader isr = new InputStreamReader(is,"utf-8");
    char[] chs = new char[1024];
    int len = 0;
    while((len=isr.read(chs))!=-1){
        System.out.println(new String(chs,0,len));
    }
    isr.close();
}