3.2 组合输入输出流

Java中与流相关的类可以组合起来从而提供强大的功能。例如,我们可以将一个Socket实例的OutputStream包装在一个BufferedOutputStream实例中,这样可以先将字节暂时缓存在一起,然后再一次全部发送到底层的通信信道中,以提高程序的性能。我们还能再将这个BufferedOutputStream实例包裹在一个DataOutputStream实例中,以实现发送基本数据类型的功能。以下是实现这种组合的代码:

figure_0062_0066

图 3-1 流组合

figure_0062_0067

图3-1展示了这种组合。在这个例子中,我们先将基本数据的值,一个一个写入Data OutputStream中,DataOutputStream再将这些数据以二进制的形式写入BufferedOutput-Stream并将三次写入的数据缓存起来,然后再由BufferedOutputStream一次性地将这些数据写入套接字的OutputStream,最后由OutputStream将数据发送到网络。在另一个终端,我们创建了相应的组合InputStream,以有效地接收基本数据类型。

对Java输入输出API的完整介绍不在本书的讨论范围中,不过,表3-1列出了一些相关的Java输入输出类,为介绍它们的强大功能起一个抛砖引玉的作用。