从01开始 从01开始
首页
  • 计算机科学导论
  • 数字电路
  • 计算机组成原理

    • 计算机组成原理-北大网课
  • 操作系统
  • Linux
  • Docker
  • 计算机网络
  • 计算机常识
  • Git
  • JavaSE
  • Java高级
  • JavaEE

    • Ant
    • Maven
    • Log4j
    • Junit
    • JDBC
    • XML-JSON
  • JavaWeb

    • 服务器软件
    • Servlet
  • Spring
  • 主流框架

    • Redis
    • Mybatis
    • Lucene
    • Elasticsearch
    • RabbitMQ
    • MyCat
    • Lombok
  • SpringMVC
  • SpringBoot
  • 学习网课的心得
  • 输入法
  • 节假日TodoList
  • 其他
  • 关于本站
  • 网站日记
  • 友人帐
  • 如何搭建一个博客
GitHub (opens new window)

peterjxl

人生如逆旅,我亦是行人
首页
  • 计算机科学导论
  • 数字电路
  • 计算机组成原理

    • 计算机组成原理-北大网课
  • 操作系统
  • Linux
  • Docker
  • 计算机网络
  • 计算机常识
  • Git
  • JavaSE
  • Java高级
  • JavaEE

    • Ant
    • Maven
    • Log4j
    • Junit
    • JDBC
    • XML-JSON
  • JavaWeb

    • 服务器软件
    • Servlet
  • Spring
  • 主流框架

    • Redis
    • Mybatis
    • Lucene
    • Elasticsearch
    • RabbitMQ
    • MyCat
    • Lombok
  • SpringMVC
  • SpringBoot
  • 学习网课的心得
  • 输入法
  • 节假日TodoList
  • 其他
  • 关于本站
  • 网站日记
  • 友人帐
  • 如何搭建一个博客
GitHub (opens new window)
  • JavaSE

    • 我的Java学习路线
    • 安装Java
    • Java数据类型

    • Java多版本配置
    • 面向对象

    • Java核心类

    • IO

      • IO介绍
      • File对象介绍
      • InputStream
      • OutputStream
      • Decorator模式
      • 读写zip文件
      • Properties类
      • 读取classpath中的配置文件
      • 序列化与反序列化
      • Reader
      • Writer
        • Write方法
        • FileWriter
        • CharArrayWriter
        • StringWriter
        • OutputStreamWriter
        • 小结
      • PrintStream和PrintWriter
      • Scanner
      • 使用Files
      • Console
      • IO系列小结
    • Java与时间

    • 异常处理

    • 哈希和加密算法

    • Java8新特性

    • 网络编程

    • Java
  • JavaSenior

  • JavaEE

  • JavaWeb

  • Spring

  • 主流框架

  • SpringMVC

  • SpringBoot

  • Java并发

  • Java源码

  • JVM

  • 韩顺平

  • Java
  • Java
  • JavaSE
  • IO
2023-02-02
目录

Writer

# 16.Writer

​Reader​是带编码转换器的InputStream​,它把byte​转换为char​,而Writer​就是带编码转换器的OutputStream​,它把char​转换为byte​并输出。

‍

# Write方法

​Writer​是所有字符输出流的超类,它提供的方法主要有:

  • 写入一个字符(0~65535):void write(int c)​;
  • 写入字符数组的所有字符:void write(char[] c)​;
  • 写入String表示的所有字符:void write(String s)​。

‍

# FileWriter

​FileWriter​就是向文件中写入字符流的Writer​。它的使用方法和FileReader​类似:

try (FileWriter writer = new FileWriter("readme.txt")) {
      writer.write('H');    // 写入单个字符
      writer.write("Hello".toCharArray());    // 写入char[]
      writer.write("Wrold");    // 写入String
}
1
2
3
4
5

‍

# CharArrayWriter

​CharArrayWriter​可以在内存中创建一个Writer​,它的作用实际上是构造一个缓冲区,可以写入char​,最后得到写入的char[]​数组,这和ByteArrayOutputStream​非常类似:

try (CharArrayWriter writer = new CharArrayWriter()) {
    writer.write(65);
    writer.write(66);
    writer.write(67);
    char[] data = writer.toCharArray(); // { 'A', 'B', 'C' }
}
1
2
3
4
5
6

‍

‍

# StringWriter

​StringWriter​也是一个基于内存的Writer​,它和CharArrayWriter​类似。实际上,StringWriter​在内部维护了一个StringBuffer​,并对外提供了Writer​接口。

    // display StringWriter
    try (StringWriter writer = new StringWriter()) {
      writer.write("你好");
      System.out.println(writer.toString());//你好
    } catch (Exception e) {
      e.printStackTrace();
    }
1
2
3
4
5
6
7

‍

运行结果:

$ javac IODemo12Writer.java -encoding utf8
$ java IODemo12Writer -encoding utf8    
你好
1
2
3

‍

# OutputStreamWriter

除了CharArrayWriter​和StringWriter​外,普通的Writer实际上是基于OutputStream​构造的,它接收char​,然后在内部自动转换成一个或多个byte​,并写入OutputStream​。因此,OutputStreamWriter​就是一个将任意的OutputStream​转换为Writer​的转换器:

Writer writer = new OutputStreamWriter(new FileOutputStream("readme.txt")))
1

上述代码实际上就是FileWriter​的一种实现方式。这和上一节的InputStreamReader​是一样的。

‍

‍

# 小结

​Writer​定义了所有字符输出流的超类:

  • FileWriter​实现了文件字符流输出;
  • CharArrayWriter​​和StringWriter​​在内存中模拟一个字符流输出。

​Writer​是基于OutputStream​构造的,可以通过OutputStreamWriter​将OutputStream​转换为Writer​,转换时需要指定编码。

在GitHub上编辑此页 (opens new window)
上次更新: 2023/2/13 09:17:16
Reader
PrintStream和PrintWriter

← Reader PrintStream和PrintWriter→

Theme by Vdoing | Copyright © 2022-2023 粤ICP备2022067627号-1 粤公网安备 44011302003646号
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式