转换流 能够转换文件的编码格式,

转换流[字节流<-->字符流]

以指定的格式读取文件,最好是文件的本身的格式, 然后以自己需要的格式写出,来达成转码的需求

字符编码:

按照某种规则,将字符存储到计算机中,称为编码;反之,将存储在计算机中的二进制数按照某种规则解析显示出来,称为解码

在进行编码和解码过程中,我们必修采用是同一种规则,才能数据正常,否则,会导致来拿吗现象.

  • 字符编码:就是一套自然语言中的字符与二进制数之间的对应规则.

字符集:

字符集:是一个系统可支持的所有字符的集合,包含各国文字,标点符号,图形符号,数字等.也叫编码表.

计算机中要准确的存储和识别各种文字的字符符号,需要进行字符编码,一套字符集至少有一套字符编码

常见的字符编码集有ASCII字符集,GBK字符集.Unicode字符集

ASCII字符集:

  • ASCII是基于拉丁字母的一套电脑编码系统

  • 基本的ASCII字符集,使用7位(bit)表示一个字符,共128个字符.ASCII的扩展字符集使用8位(bit)表示一个字符,共256个字符.

ISO-8859-1字符集:

拉丁码表,别名Latin-1,用于显示欧洲使用的语言,包括荷兰,单买,德语,意大利语,西班牙等.

 

ISO-8859-1适用单字节编码,兼容ASCII编码.

GB字符集

  • GB2312:简体中文码表,里面大概含有7000多个简体汉字,此外数学符号,罗马希腊的字母.日本的假名都编进去了,连在ASCII里的原来就有的数字.标点,字母都统统重新编写进去了,

  • GBK:最常用的中文编码.是在原来GB2312码表基础上进行扩展,使用双字节编码.共收录了,共收录了21000多个汉字,完全兼容GB2312,标准,同时支持繁体汉字以及日韩汉字等.

  • GB18030:最新的中文码表,共收录了70000多个汉字,采用多字节编码,每个字可以由1个字节,2个字节或者4个字节组成,支持国内少数民族的文字.同时支持繁体字以及日韩汉字等.

Unicode字符集:

  • Unicode编码系统为表达任意语言的任意字符而设计的,是业界的一种标准,也成为了统一编码,标准万国码表

  • 它最多使用4个字节的数字来表示每个字母.符号.或者文字.有三种常见的编码方案:UTF-8,UTF-16,UTF-32.

  • UTF-8编码表,用来表示Unicode标准中的任意字符,编码规则:

    1.128个US-ASCII字符,使用的是一个字节编码

    2.拉丁子的字母,需要两个字节编码

    3.大部分常见的汉字,使用的是三个字节编码

    4.其他极少数的辅助字符,采用的四个字节编码

编码会引发的问题

由于编码规则不一致,导致引发乱码现象.

那么如何读取GBK编码的文件呢

InputStreamReader类

转换流 java.io.inputStreamReader.是Reader的子类,它是从字节流到字符流的桥梁,它读取字节并使用指定的字符集将其解码为字符.它的字符集可以由名称指定,或者可以使用平台默认的字符集.

构造方法

  • public inputStreamReader(inputStream in):创建一个使用默认的字符集的字符流.

  • public inputStreamReader(inputStream in,String charsetName):创建一个指定字符集的字符流

OutputStreamWriter类

转换流java.io.OutputStreamWriter是Writer的子类,它是字符流到字节流的桥梁.使用指定的字符集将字符编码为字节.它的字符集可以手动指定,特可以使用平台默认的字符集.

构造方法

  • public OutputStreamWriter(OutputStream out):创建一个使用平台默认的字符集的字符流.

  • public OutputStreamWriter(OutputStream out,String charsetName):创建一个指定的字符集的字符流.

  • 转换流[字节流<-->字符流]

    字符编码:

    按照某种规则,将字符存储到计算机中,称为编码;反之,将存储在计算机中的二进制数按照某种规则解析显示出来,称为解码

    在进行编码和解码过程中,我们必修采用是同一种规则,才能数据正常,否则,会导致来拿吗现象.

    • 字符编码:就是一套自然语言中的字符与二进制数之间的对应规则.

    字符集:

    字符集:是一个系统可支持的所有字符的集合,包含各国文字,标点符号,图形符号,数字等.也叫编码表.

    计算机中要准确的存储和识别各种文字的字符符号,需要进行字符编码,一套字符集至少有一套字符编码

    常见的字符编码集有ASCII字符集,GBK字符集.Unicode字符集

    ASCII字符集:

    • ASCII是基于拉丁字母的一套电脑编码系统

    • 基本的ASCII字符集,使用7位(bit)表示一个字符,共128个字符.ASCII的扩展字符集使用8位(bit)表示一个字符,共256个字符.

    ISO-8859-1字符集:

    拉丁码表,别名Latin-1,用于显示欧洲使用的语言,包括荷兰,单买,德语,意大利语,西班牙等.

    ISO-8859-1适用单字节编码,兼容ASCII编码.

    GB字符集

    • GB2312:简体中文码表,里面大概含有7000多个简体汉字,此外数学符号,罗马希腊的字母.日本的假名都编进去了,连在ASCII里的原来就有的数字.标点,字母都统统重新编写进去了,

    • GBK:最常用的中文编码.是在原来GB2312码表基础上进行扩展,使用双字节编码.共收录了,共收录了21000多个汉字,完全兼容GB2312,标准,同时支持繁体汉字以及日韩汉字等.

    • GB18030:最新的中文码表,共收录了70000多个汉字,采用多字节编码,每个字可以由1个字节,2个字节或者4个字节组成,支持国内少数民族的文字.同时支持繁体字以及日韩汉字等.

    Unicode字符集:

    • Unicode编码系统为表达任意语言的任意字符而设计的,是业界的一种标准,也成为了统一编码,标准万国码表

    • 它最多使用4个字节的数字来表示每个字母.符号.或者文字.有三种常见的编码方案:UTF-8,UTF-16,UTF-32.

    • UTF-8编码表,用来表示Unicode标准中的任意字符,编码规则:

      1.128个US-ASCII字符,使用的是一个字节编码

      2.拉丁子的字母,需要两个字节编码

      3.大部分常见的汉字,使用的是三个字节编码

      4.其他极少数的辅助字符,采用的四个字节编码

    编码会引发的问题

    由于编码规则不一致,导致引发乱码现象.

    那么如何读取GBK编码的文件呢

    InputStreamReader类

    转换流 java.io.inputStreamReader.是Reader的子类,它是从字节流到字符流的桥梁,它读取字节并使用指定的字符集将其解码为字符.它的字符集可以由名称指定,或者可以使用平台默认的字符集.

    构造方法

    • public inputStreamReader(inputStream in):创建一个使用默认的字符集的字符流.

    • public inputStreamReader(inputStream in,String charsetName):创建一个指定字符集的字符流

    OutputStreamWriter类

    转换流java.io.OutputStreamWriter是Writer的子类,它是字符流到字节流的桥梁.使用指定的字符集将字符编码为字节.它的字符集可以手动指定,特可以使用平台默认的字符集.

构造方法

  • public OutputStreamWriter(OutputStream out):创建一个使用平台默认的字符集的字符流.

  • public OutputStreamWriter(OutputStream out,String charsetName):创建一个指定的字符集的字符流.

练习:转换文件的编码

将GBK编码的文本文件,转换为UTF-8编码的文件.

分析:

1.指定GBK编码的转换流,读取文本文件.inputStreamReader

2.使用UTF-8编码的转换流,写入到新文本文件中 OutputStreamWriter

  //1.1指定GBK编码的转换流,读取文本文件.inputStreamReader
       InputStreamReader bgk = new InputStreamReader(new FileInputStream(new File("day30-IO\GBK.txt")), "gbk");
      //1.22.使用UTF-8编码的转换流,写入到新文本文件中 OutputStreamWriter
       //此时不写编码格式也会默认是UTF-8,默认为平台的编码
       OutputStreamWriter fs = new OutputStreamWriter(new FileOutputStream(new File("day30-IO\UTF-8.txt")), "UTF-8");
       //2.使用转换流读取数据源文件
       //2.1定义一个指定长度的字符数组
       char[] chars = new char[1024];
       //2.2定义一个变量,记录读取到的有效字符个数
       int len=0;
       //2.3循环读取
       while ((len=bgk.read(chars))!=-1){
           //读取出来的数据要写入到目的地文件中
           fs.write(chars,0,len);
      }
       //4.关闭流,释放系统资源
       fs.close();
       bgk.close();

序列化流

原文地址:https://www.cnblogs.com/rosiness/p/14175942.html