0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

java的字符流分析

科技绿洲 来源:Java技术指北 作者:Java技术指北 2023-10-10 15:38 次阅读

上次聊到了 java字符流 Reader,今天来看看它的好朋友 Writer 字符流。

Writer

java 中的 IO 输出流不是只有 OutputStream 还有按字符输出的 Writer。

OutputStreamWriter
字节流,以 byte 为单位字符流,以 char 为单位
输出字节(0~255):void write(int b)输出字符(0~65535):void write(int c)
输出字节数组:void write(byte[] b)输出字符数组:void write(char[] c)

和 OutputStream 一样,Writer 也是所有字符输出流的超类。主要的方法是:public void write(char cbuf[]) throws IOException, write() 方法将 cbuf 参数全部输出,write(String str) 和 write(int c) 两个方法最终调用的还是 write(char cbuf[])

FileWriter

FileWriter 就是向文件中写入字符流的 Writer。new FileWriter(fileName) 构造函数是将文件从头开始写入并不是在文件结尾处继续写入。new FileWriter(fileName, true) 则是在文件结尾处写入。

private void fileWriteDemo() throws IOException {
    Writer writer = new FileWriter("D:writer.txt");
    writer.write("测试写入".toCharArray());
    writer.close();
}

Writer 实现了 Closeable 接口,可以用 try(Writer writer = new FileWriter("D:writer.txt")) {} 的方式关闭掉资源。

OutputStreamWriter

OutputStreamWriter 将输出的字符流转换为字节流。可以使用指定的编码字符集。new OutputStreamWriter(OutputStream out, Charset cs) 。

private void outputStreamWriteDemo() throws IOException {
    // 乱码
    try(OutputStreamWriter writer = new OutputStreamWriter(new FileOutputStream("D:writer.txt"), "gb2312")) {
        writer.write("杺");
        writer.write(66);
    }

    // 正常
    try(OutputStreamWriter writer = new OutputStreamWriter(new FileOutputStream("D:writer.txt", true), "gbk")) {
        writer.write("杺");
        writer.write(66);
    }

}

StringWriter 和 CharArrayWriter

StringWriter 内部有一个 StringBuffer 对象作为其缓冲区。可以利用其缓冲区中的内容来构造字符串。

private void stringWriteDemo() throws IOException {
    String str = "写入测试";
    try(StringWriter writer = new StringWriter()) {
        writer.write(str);
        writer.write(str);
        System.out.println(writer.getBuffer().toString());
    }

}

CharArrayWriter 和 StringWriter 几乎一样,也是在内存中构造一个字符串缓冲区。不过底层不是一个 StringBuffer 了,是 char 的数组,默认 32 个长度。

BufferedWriter

BufferedWriter 是一个缓冲的字符输出流,为其他 Writer 提供缓冲的功能。

private void bufferedWriteDemo() throws IOException {
    FileWriter fileWriter = new FileWriter("D:writer.txt", true);
    try(BufferedWriter writer = new BufferedWriter(fileWriter)) {
        writer.write(65);
        writer.write(66);
    }
    fileWriter.close();

}

总结

介绍了几种常用 Writer 输出流的使用方式。FileWriter 用于写入文件,BufferedWriter 自带缓冲区,StringWriter 和 CharArrayWriter 基于内存,OutputStreamWriter 将字符流转为字节流。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 接口
    +关注

    关注

    33

    文章

    8486

    浏览量

    150806
  • JAVA
    +关注

    关注

    19

    文章

    2956

    浏览量

    104531
  • 参数
    +关注

    关注

    11

    文章

    1773

    浏览量

    32075
  • 字符
    +关注

    关注

    0

    文章

    232

    浏览量

    25170
  • Writer
    +关注

    关注

    0

    文章

    8

    浏览量

    7303
收藏 人收藏

    评论

    相关推荐

    Java程序设计:7.5.1 字符缓冲#Java

    JAVA字符
    学习硬声知识
    发布于 :2022年11月16日 15:58:08

    Java程序设计:7.5.2 字符缓冲举例#Java

    JAVA字符
    学习硬声知识
    发布于 :2022年11月16日 15:58:36

    Java中的输入输出盘点

    Java中的分为两种,一种是字节流,另一种是字符,分别由四个抽象类来表示(每种包括输入和输出两种所以一共四个):InputStream
    发表于 07-11 07:56

    基于数据Java字节码分析

    本文基于数据框架理论,提出了如何将数据分析方法应用于JAVA 字节码中,通过建立数据与半格、数据
    发表于 12-25 13:22 9次下载

    java与文件实验

    实验10 与文件一、实验目的 1. 理解数据的概念2. 理解Java的层次结构3. 理解文件的概念二、实验要求 1. 掌握字节流
    发表于 09-23 19:04 1901次阅读

    实例解析Java字符串内存管理方法

    应用服务器运行过程中,约40%的活跃堆空间被用来保存字符串数据[2]。 通过对Java字符串操作接口的分析可以发现,随着这些操作的运行会产生较多的无用
    发表于 10-27 10:20 1次下载
    实例解析<b class='flag-5'>Java</b><b class='flag-5'>字符</b>串内存管理方法

    Java中一种字符串的内存管理方法

    应用服务器运行过程中,约40%的活跃堆空间被用来保存字符串数据[2]。 通过对Java字符串操作接口的分析可以发现,随着这些操作的运行会产生较多的无用
    发表于 11-30 17:39 576次阅读
     <b class='flag-5'>Java</b>中一种<b class='flag-5'>字符</b>串的内存管理方法

    理解Java字符与字节流的区别

    JDK称为Java开发包或Java开发工具,是一个编写Java的Applet小程序和应用程序的程序开发环境。JDK是整个Java的核心,包括了Jav
    发表于 12-04 10:39 1106次阅读
    理解<b class='flag-5'>Java</b>中<b class='flag-5'>字符</b><b class='flag-5'>流</b>与字节流的区别

    Java 字节流 字符 转换流

    Java运行系统使用字节码验证过程来保证装载到网络上的代码不违背任何Java语言限制。这个安全机制部分包括类如何从网上装载。例如,装载的类是放在分开的名字空间而不是局部类,预防恶意的小应用程序用它自己的版本来代替标准Java类。
    发表于 12-04 11:15 1419次阅读
    <b class='flag-5'>Java</b> 字节流 <b class='flag-5'>字符</b><b class='flag-5'>流</b> 转换流

    基础:Java IO学习总结

    IO的分类 根据处理数据类型的不同分为:字符和字节流 根据数据流向不同分为:输入流和输出
    发表于 03-08 14:38 2063次阅读

    字符和字节流有什么那区别

    字符流在Java中,根据处理的数据单位不同,分为字节流和字符字符是由
    发表于 12-20 17:46 8035次阅读
    <b class='flag-5'>字符</b><b class='flag-5'>流</b>和字节流有什么那区别

    Java反射机制清空字符串导致业务异常分析

    JVM为了提高性能和减少内存开销,在实例化字符串常量时进行了优化。JVM在Java堆上开辟了一个字符串常量池空间(StringTable),JVM通过ldc指令加载字符串常量时会调用
    的头像 发表于 06-22 11:17 963次阅读

    如何利用Java判断一个字符串是否包含某个字符

    如何利用Java通过不同的方法来判断一个字符串是否包含某个字符。 **2 ****方法** 1. .contains方法
    的头像 发表于 02-17 15:13 1449次阅读
    如何利用<b class='flag-5'>Java</b>判断一个<b class='flag-5'>字符</b>串是否包含某个<b class='flag-5'>字符</b>

    Java中如何判断字符相等

    在Python中判断字符相等与判断数字类型时所用的方法相同都是使用”==”来进行判定,在Java中当我们调用Scanner,进行输入字符串判定时,则会无法进行判定。
    的头像 发表于 02-24 10:41 766次阅读
    <b class='flag-5'>Java</b>中如何判断<b class='flag-5'>字符</b>相等

    java switch case 能不能用字符

    Java的switch语句在处理字符串方面有一些限制。在Java 7之前,switch语句只能处理整数类型的表达式,如int或char。但从Java 7开始,
    的头像 发表于 11-30 14:46 1940次阅读