千家信息网

Java字符流实例分析

发表于:2026-11-01 作者:千家信息网编辑
千家信息网最后更新 2026年11月01日,这篇文章主要介绍"Java字符流实例分析"的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇"Java字符流实例分析"文章能帮助大家解决问题。一、字符流的由来由于使用
千家信息网最后更新 2026年11月01日Java字符流实例分析

这篇文章主要介绍"Java字符流实例分析"的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇"Java字符流实例分析"文章能帮助大家解决问题。

    一、字符流的由来

    由于使用字节流操控中文时不是很方便,Java就提供了字符流来进行操控中文

    实现原理:字节流+编码表

    为什么用字节流进行复制带有中文的文本文件时没有问题?

    因为底层操作会自动进行字节拼接成中文

    怎样识别该字节是中文呢?

    汉字在存储时,无论是UTF-8还是GBK,第一个字节都是负数用来提示

    二、编码表

    字符集:

    是一个系统支持的所有字符的集合,包括国家文字、标点符号、图形符号、数字等

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

    常见的字符集有ASCII字符集、GBXXX字符集、Unicode字符集等

    GBK:最常用的中文码表,是在GB2312标准基础上的扩展规范,使用了双字节编码方案,共收录了21003个汉字,完全兼容GB2312标准,同时支持繁体汉字以及日韩汉字等

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

    Unicode字符集:

    为了表达任意语言的任意字符而设计,是业界的一个标准,也称为统一码、标准万国码;它最多使用4个字节的数字来表达每个字母、符号,或者文字。有三种编码方案:UTF-8、UTF-16、UTF32,最常用的是UTF-8

    UTF-8:可以用来表示Unicode标准中的任意字符,它是电子邮件、网页及其他存储或传送文件的应用中,优先采用的编码。互联网工作小组要求所有的互联网协议都必须支持UTF-8编码格式。它使用一至四个字节为每个字符编码

    UTF-8编码规则:

    128个US-ASCII字符,只需要一个字节编码

    拉丁文等字符,需要两个字节编码

    大部分常用字(含中文),使用三个字节编码

    其他极少使用的UniCode辅助字符,使用四个字节编码

    总结:编码时使用那种规则,解码就需要采用对应的规则,否则会乱码

    三、字符串中的编码解码问题

    编码方法(IDEA):

    byte[] getBytes():使用平台默认的字符集将该String编码为一系列字节,将结果存储到新的字节数组中

    byte[] getBytes(String charsetName):使用指定的字符集将该String编码为一系列字节,将结果存储到新的字节数组中

    解码方法(IDEA):

    String(byte[]bytes):通过使用平台的默认字符集解码指定的字节数组来构造新的String

    String(byte[]bytes,String charsetName):通过指定的字符集解码指定的字节数组来构造新的String

    IDEA中默认的编码格式是UTF-8

    四、字符流的编码解码问题

    字符流抽象基类:

    Reader:字符输入流的抽象类

    Writer:字符输出流的抽象类

    字符流中和编码解码问题相关的两个类:

    InputStreamReader:是从字节流到字符流的桥梁:它读取字节,并使用指定的字符集将其解码为字符。它使用的字符集可以由名称指定,也可以被明确指定,或者可以接受平台的默认字符集

    构造方法:

    InputStreamReader(InputStream in)创建一个使用默认字符集的InputStreamReader。
    InputStreamReader(InputStream in, String charsetName)创建一个使用命名字符集的InputStreamReader。

    OutputStreamWruter:是从字符流到字节流的桥梁:使用自订的字符集将写入的字符编码为字节,它使用的字符集可以由名称指定,也可以被明确指定,或者可以接受平台的默认字符集

    构造方法:

    OutputStreamWriter(OutputStream out)创建一个使用默认字符编码的OutputStreamWriter。
    OutputStreamWriter(OutputStream out, String charsetName)创建一个使用命名字符集的OutputStreamWriter。
    public class ConversionStreamDemo {    public static void main(String[] args) throws IOException {        //创建一个默认编码格式的InputStreamReader\OutputStreamWriter        InputStreamReader ipsr = new InputStreamReader(new FileInputStream("E:\\abc.txt"));        OutputStreamWriter opsw = new OutputStreamWriter(new FileOutputStream("E:\\abc.txt"));        //写入数据        opsw.write("你好啊");        opsw.close();        //读数据,方式一:一次读取一个字节数据        int ch;        while ((ch = ipsr.read()) != -1) {            System.out.print((char) ch);        }        ipsr.close();    }}

    四、字符流写数据的五种方法

    方法名说明
    void write(int c)写一个字符
    void write(char[] cbuf)写入一个字符数组
    void write(char[] cbuf,int off,int len)写入字符数组的一部分
    void write(String str)写入一个字符串
    void write(String str,int off,int len)写入一个字符串的一部分

    字符流写数据需要注意缓冲区的问题,如果想要将缓冲区的数据加载出来需要在写入方法后加上刷新方法flush();

    前三个方法与字节流写入方法使用相同,这里重点介绍下面两种方式

    public class OutputStreamWriterDemo {    public static void main(String[] args) throws IOException {        //创建一个默认编码格式的OutputStreamWriter对象        OutputStreamWriter opsw=new OutputStreamWriter(new FileOutputStream("E:\\abc.txt"));        //方式一:写入一个字节        opsw.write(97);        opsw.flush();//如果需要在文件中立即显示输入的数据,就需要加入刷新方法        //方式二:写入一个字符数组        char[]ch={'a','b','c','二'};        opsw.write(ch);        opsw.flush();//如果需要在文件中立即显示输入的数据,就需要加入刷新方法        //方式三:写入一个字符数组的一部分        opsw.write(ch,0,2);        opsw.flush();//如果需要在文件中立即显示输入的数据,就需要加入刷新方法        //方式四:写入一个字符串        opsw.write("一二三");        opsw.flush();//如果需要在文件中立即显示输入的数据,就需要加入刷新方法        //方式五:写入一个字符串的一部分        opsw.write("三四五",1,2);        opsw.flush();//如果需要在文件中立即显示输入的数据,就需要加入刷新方法    }}

    五、字符流读数据的两种方法

    方法名说明
    int read()一次读取一个字符数据
    int read(char[] cbuf)一次读取一个字符数组数据
    public class InputStreamReadDemo {    public static void main(String[] args) throws IOException {        //创建一个默认编码格式的InputStreamReader        InputStreamReader ipsr=new InputStreamReader(new FileInputStream("E:\\abc.txt"));        //读取数据,方式一一次读取一个字符数据        int ch;        while ((ch=ipsr.read())!=-1){            System.out.print((char) ch);        }        ipsr.close();        //方式二:一次读取一个字符数组数据        char []ch=new char[1024];        int len;        while ((len=ipsr.read(ch))!=-1){            System.out.print(new String(ch,0,len));        }        ipsr.close();    }}

    小结:如果使用默认编码格式的话,那么字符输入流InputStreamReader可以使用子类FileReader来替代,字符输出流OutputStreamWriter可以使用其子类FileWriter来替代,两者在使用默认编码格式的情况下作用一致。

    关于"Java字符流实例分析"的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识,可以关注行业资讯频道,小编每天都会为大家更新不同的知识点。

    字符 编码 字节 字符集 方法 数据 数组 方式 中文 文件 格式 汉字 输入 问题 字符串 标准 UTF-8 存储 支持 平台 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 互联网科技工作委员会 互联网科技工作委员会副主任毛军 科技互联网技术 北京互联网科技公司 北京互联网科技有限公司 奇酷互联网科技公司 云电互联网科技 广西互联网科技公司 多迪互联网科技有限公司 衡水科技产业互联网平台 贵州叶脉互联网科技有限公司所属行业 青岛科技大学互联网大赛研究生 互联网5g黑科技有哪些 哈尔滨屹滨互联网科技有限公司 广西互联网科技孵化中心 互联网新科技动漫ppt素材 徐州市互联网科技有限公司 互联网科技资金流入 北京互联网科技类企业分布 易租星互联网科技有限公司 广州紫鲸互联网科技有限公司 中关村互联网科技集团 互联网医疗科技 互联网金融科技委员会 科技类的互联网平台 无锡溥仪互联网科技有限公司 北京三清互联网科技 互联网科技实习生岗位职责 互联网领先科技活动 重庆科技产业互联网有哪些
    0