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

    文章

    7643

    浏览量

    148520
  • JAVA
    +关注

    关注

    19

    文章

    2904

    浏览量

    102998
  • 参数
    +关注

    关注

    11

    文章

    1398

    浏览量

    31476
  • 字符
    +关注

    关注

    0

    文章

    229

    浏览量

    24889
  • Writer
    +关注

    关注

    0

    文章

    8

    浏览量

    7281
收藏 人收藏

    评论

    相关推荐

    Java程序设计:7.4.1 文件字符#Java

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

    Java程序设计:7.4.2 文件字符举例#Java

    JAVA文件字符
    学习硬声知识
    发布于 :2022年11月16日 15:57:37

    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程序设计教程课件第1章  Java和面向对象概述.ppt第2章  Java概述.ppt第3章  Java语言基础.ppt第4章  类和对
    发表于 12-08 17:46 193次下载
    <b class='flag-5'>JAVA</b>程序设计教程课件

    Java的类

    1.1 有关面向对象的概念1.2 Java语言的特点1.3 Java的开发环境1.4  第一个Java程序1.5 Java类型系统1.6
    发表于 04-28 14:23 0次下载

    实例解析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 466次阅读
     <b class='flag-5'>Java</b>中一种<b class='flag-5'>字符</b>串的内存管理方法

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

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

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

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

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

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

    Java中如何判断字符相等

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

    java字符串转化为日期格式

    Java中,字符串转化为日期格式是一个常见的需求。日期格式在处理时间相关的操作时非常重要,它可以用来表示一段时间的开始和结束,也可以用来计算时间差等。本文将详细介绍如何将一个字符串转化为日期格式
    的头像 发表于 11-17 16:38 750次阅读

    java switch case 能不能用字符

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