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子类实现FilterWriterpublic abstract class FilterWriter extends Writer { protected Writer out; } -
Writer的几个实现类都值得了解- 装饰器模式,内部有一个
WriterFilterWriter:装饰器模式的关键类,内部有一个WriterBufferedWriter:增加缓冲功能,增加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");
}
}
浙公网安备 33010602011771号