阿里云-云小站(无限量代金券发放中)
【腾讯云】云服务器、云数据库、COS、CDN、短信等热卖云产品特惠抢购

Writer

27次阅读
没有评论

共计 1544 个字符,预计需要花费 4 分钟才能阅读完成。

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

WriterOutputStream 的区别如下:

OutputStream Writer
字节流,以 byte 为单位 字符流,以 char 为单位
写入字节(0~255):void write(int b) 写入字符(0~65535):void write(int c)
写入字节数组:void write(byte[] b) 写入字符数组:void write(char[] c)
无对应方法 写入 String:void write(String s)

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

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

FileWriter

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

try (Writer writer = new FileWriter("readme.txt", StandardCharsets.UTF_8)) {writer.write('H'); // 写入单个字符
    writer.write("Hello".toCharArray()); // 写入 char[]
    writer.write("Hello"); // 写入 String
}

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'}
}

StringWriter

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

OutputStreamWriter

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

try (Writer writer = new OutputStreamWriter(new FileOutputStream("readme.txt"), "UTF-8")) {// TODO:
}

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

小结

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

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

使用 try (resource) 保证 Writer 正确关闭;

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

正文完
星哥说事-微信公众号
post-qrcode
 0
星锅
版权声明:本站原创文章,由 星锅 于2024-08-05发表,共计1544字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
【腾讯云】推广者专属福利,新客户无门槛领取总价值高达2860元代金券,每种代金券限量500张,先到先得。
阿里云-最新活动爆款每日限量供应
评论(没有评论)
验证码
【腾讯云】云服务器、云数据库、COS、CDN、短信等云产品特惠热卖中