输入输出
编程语言的I/O类库中常使用流这个抽象概念,它代表有产生数据能力的数据源对象和能接收数据能力的接收端对象。
任何InputStream和Reader派生而来的类都有一个read()方法,能够用来读取单个字节或者字节数组。任何OutputStream和Writer派生而来的类都有write()方法,用了写单个字节或者字节数组。
InputStream
InputStream表示那些从不同数据源产生输入的类。这些数据源包括:
- 字节数组。
- String对象。
- 文件。
- “管道”,工作方式与实际管道相似,一端输入,一端接收。解决多线程中协作问题,将协作代码和业务代码解耦。
- 多个流队列合成的队列。
- 其它数据,如Internet链接等。
每种数据都有对应的InputStream子类。另外装饰器FilterInputStream也属于一种InputStream.
类 | 功能 | 构造器参数 |
---|---|---|
ByteArrayInputStream | 允许将内存的缓冲区当作InputStream使用 | 缓冲区,字节将从中取出 |
StringBufferInputStream | 将字符串转为InputStream | 字符串,底层实现使用的是StringBuffer |
FileInputStream | 从文件中读取信息 | 字符串,表示文件名、文件或者FileDescriptor对象 |
PipedInputStream | 产生用于写入PipedOutputStream对象的数据。实现“管道化”概念 | PipedOutputStream |
SequenceInputStream | 将两个或多个的InputStream转换为一个单一的InputStream | 两个InputStream或者容纳InputStream的Enumeration |
FilterInputStream | 抽象类,作为装饰器接口 |
OutputStream
该类别的类觉得了输出所要去的目标:字节数组,文件或者管道。
装饰器FilterOutputStream类提供了一个基类,“装饰器”将有用的属性或者有用的接口与输出流连接起来。
类 | 功能 | 构造器参数 |
---|---|---|
ByteArrayOutputStream | 在内存中创建缓冲区,所以送往流的数据都要放置在此缓冲区 | 缓冲区初始化尺寸 |
FileOutputStream | 用于将信息写至文件 | 字符串,表示文件名,文件或者FileDescrptor对象 |
PipedOutputStream | 任何写入的数据都会作为PipedInputStream的输出。实现“管道”概率 | PipedInputStream |
FilterOutputStream | 抽象类,作为装饰器接口 |
添加有用的属性和接口
**装饰器:**创建的参数不同时,表现也不相同。用于多种功能自由组合时使用。
FilterInputStream和FilterOutputStream装饰器接口用来控制特定的输入流和输出流。
FilterInputStream从InputStream读取数据
类 | 功能 | 构造器参数 |
---|---|---|
DataInputStream | 配合DataOutputStream使用,可以按照可移植方式从流中读取基本数据类型。 | InputStream |
BufferdInputStream | 防止每次操作时都进行写操作。代表“使用缓冲区”。 | InputStream |
LineNumberInputStream | 可以跟踪流中的行号。 | InputStream |
PushbackInputStream | 能弹出字节缓冲区。因此可以将最后一个字节退回。java编译器会使用,我们一般用不到。 | InputStream |
FilterOutputStream向OutputStream写入
类 | 功能 | 构造器参数 |
---|---|---|
DataOutputStream | 与DataInputStream搭配使用,可按照可植入方式像流中写入基本数据类型。 | OutputStream |
PrintStream | 用与产生格式化输出。 | OutputStream |
BufferdOutputStream | 避免每次输出时都进行实际的写操作。代码“使用缓冲区”。可以调用flush()清空缓冲区。 | OutputStream |