上面的例子是《Java 编程思想》中的示例,这本书中的每个代码示例都很经典,Bruce Eckel大神把面向对象的思想应用的炉火纯青,非常值得细品。
InputStream和OutputStreamInputStream是输入流,前面已经说到,它是从数据源对象将数据读入程序内容时,使用的流对象。通过看InputStream的源码知道,它是一个抽象类,
1public abstract class InputStream extends Object implements Closeable2
提供了一些基础的输入流方法:
1//从数据中读入一个字节,并返回该字节,遇到流的结尾时返回-12abstract int read()
3
4//读入一个字节数组,并返回实际读入的字节数,最多读入b.length个字节,遇到流结尾时返回-1
5int read(byte[] b)
6
7// 读入一个字节数组,返回实际读入的字节数或者在碰到结尾时返回-1.
8//b:代表数据读入的数组, off:代表第一个读入的字节应该被放置的位置在b中的偏移量,len:读入字节的最大数量
9int read(byte[],int off,int len)
10
11// 返回当前可以读入的字节数量,如果是从网络连接中读入,这个方法要慎用,
12int available()
13
14//在输入流中跳过n个字节,返回实际跳过的字节数
15long skip(long n)
16
17//标记输入流中当前的位置
18void mark(int readlimit)
19
20//判断流是否支持打标记,支持返回true
21boolean markSupported()
22
23// 返回最后一个标记,随后对read的调用将重新读入这些字节。
24void reset()
25
26//关闭输入流,这个很重要,流使用完一定要关闭
27void close()
28
直接从InputStream继承的流,可以发现,基本上对应了每种数据源类型。
类 功能ByteArrayInputStream 将字节数组作为InputStream
StringBufferInputStream 将String转成InputStream
FileInputStream 从文件中读取内容
PipedInputStream 产生用于写入相关PipedOutputStream的数据。实现管道化
SequenceInputStream 将两个或多个InputStream对象转换成单一的InputStream
FilterInputStream 抽象类,主要是作为“装饰器”的接口类,实现其他的功能流