java.io包与Decorator模式

java.io包是用于输入输出(I/O)的包。这里,使用了Decorator模式。

首先,可以像下面这样生成一个读取文件的实例。

1
Reader reader = new FileReader("datafile.txt");

然后,也可以像下面这样在读取文件时将文件内容放入缓冲区。

1
2
Reader reader = new BufferedReader(
new FileReader("datafile.txt"));

这样,在生成BufferedReader类的实例时,会指定将文件读取到FileReader类的实例中。
再然后,也可以像下面这样管理行号。

1
2
3
Reader reader = new LineNumberReader(
new BufferedReader(
new FileReader("datafile.txt")));

无论是LineNumberReader类的构造函数还是BufferedReader类的构造函数,都可以接收Reader类(的子类)的实例作为参数,因此可以像上面那样自由地进行各种组合。
还可以管理行号,但不进行缓存处理。

1
2
Reader reader = new LineNumberReader(
new FileReader("datafile.txt"));

接下来,还会管理行号,进行缓存,但是不从文件中读取数据,而是从网络中读取数据。

1
2
3
4
5
6
7
java.net.Socket socket = new Socket(hostname, portnumber);
...
Reader reader = new LineNumberReader(
new BufferedReader(
new InputStreamReader(
socket.getInputStream()
)));

这里使用的InputStreamReader类既接收getInputStream方法返回的InputStream类的实例作为构造函数的参数,也提供了Reader类的接口(API)。