20230517 java.io.Writer
介绍
-
java.io.Writer
-
public abstract class Writer implements Appendable, Closeable, Flushable
-
用于写入字符流的抽象类
-
只有一个抽象方法需要子类实现:
public abstract void write(char cbuf[], int off, int len) throws IOException;
-
字符流相对字节流并不是对等的,字符流的底层是字节流
-
在子类设计中装饰器模式非常常见,
FilterWriter
类是实现装饰器模式的关键类,但是没有几个Writer
子类实现FilterWriter
public abstract class FilterWriter extends Writer { protected Writer out; }
-
Writer
的几个实现类都值得了解- 装饰器模式,内部有一个
Writer
FilterWriter
:装饰器模式的关键类,内部有一个Writer
BufferedWriter
:增加缓冲功能,增加newLine
方法PrintWriter
:增加format
,print
系列方法
- 简单实现
CharArrayWriter
:使用char[]
StringWriter
:使用StringBuffer
- 字节流相关:
StreamEncoder
:将字符流编码为字节流OutputStreamWriter
:使用StreamEncoder
,字节流转字符流,需要设置字符编码 CharsetFileWriter
:OutputStreamWriter
子类,内部使用FileOutputStream
- 管道相关:
PipedWriter
:管道化字符输出流
- 装饰器模式,内部有一个
API
构造函数
protected Writer()
protected Writer(Object lock)
公共方法
- append
- close
- flush
- 用于将缓冲区的数据刷出到目标设备(比如文件或控制台)中。在使用 Writer 类时,所有的输出会先被写入缓冲区,然后等到缓冲区满了、缓冲区中有数据需要被输出时,才会将缓冲区的数据刷出。
- flush 方法用于手动触发将缓冲区的数据刷出操作,使缓冲区中的数据即刻输出,而不必等到缓冲区满了或者缓冲区的自动刷出策略生效。
- nullWriter
- 返回一个丢弃所有字符的新 Writer ,对于 write 等方法什么都不做
- write
代码示例
自定义实现类:在控制台打印字符串
public class MyWriter extends Writer {
@Override
public void write(char[] cbuf, int off, int len) throws IOException {
System.out.println(new String(cbuf, off, len));
}
@Override
public void flush() throws IOException {
}
@Override
public void close() throws IOException {
}
public static void main(String[] args) throws IOException {
MyWriter myWriter = new MyWriter();
myWriter.write("abc");
myWriter.append("xxx");
}
}