java io流是既可以从中读取,也可以写入到其中的数据流。正如这个系列教程之前提到过的,流通常会与数据源、数据流向目的地相关联,比如文件、网络等等。
java.io.inputstream类是所有java io输入流的基类。如果你正在开发一个从流中读取数据的组件,请尝试用inputstream替代任何它的子类(比如fileinputstream)进行开发。这么做能够让你的代码兼容任何类型而非某种确定类型的输入流。
然而仅仅依靠inputstream并不总是可行。如果你需要将读过的数据推回到流中,你必须使用pushbackinputstream,这意味着你的流变量只能是这个类型,否则在代码中就不能调用pushbackinputstream的unread()方法。
通常使用输入流中的read()方法读取数据。read()方法返回一个整数,代表了读取到的字节的内容(译者注:0 ~ 255)。当达到流末尾没有更多数据可以读取的时候,read()方法返回-1。
这是一个简单的示例:
java.io.outputstream是java io中所有输出流的基类。如果你正在开发一个能够将数据写入流中的组件,请尝试使用outputstream替代它的所有子类。
你可以将流整合起来以便实现更高级的输入和输出操作。比如,一次读取一个字节是很慢的,所以可以从磁盘中一次读取一大块数据,然后从读到的数据块中获取字节。为了实现缓冲,可以把inputstream包装到bufferedinputstream中。代码示例:
缓冲同样可以应用到outputstream中。你可以实现将大块数据批量地写入到磁盘(或者相应的流)中,这个功能由bufferedoutputstream实现。
将不同的流整合到一个链中,可以实现更多种高级操作。通过编写包装了标准流的类,可以实现你想要的效果和过滤器。