IO笔记(上)--字节单位的输出输出流
先上继承关系图:
图片摘自:http://www.cnblogs.com/skywang12345/p/io_01.html
输入流InputStream
输入流的最上级对象是InputStream(抽象类)。有以下方法:
方法 | 返回值 | 说明 | 备注 |
---|---|---|---|
read() | int | 按照单位读取一次 | abstract,抽象方法 |
read(byte[] buffer) | int | 一次读取buffer长度的内容 | |
read(byte[] buffer, int offset, int length) | int | 读取并放入buffer | |
skip(long byteCount) | long | 跳过 | |
mark(int readlimit) | void | 创建一个标记 | 同reset()配合使用 readlimit: |
reset() | void | 返回标记位置 | 同mark(int readlimit)配合使用 |
markSupported() | boolean | 判断是否支持标记 | |
available() | int | 剩余可读取长度 | 同步方法 |
close() | void | 关闭输入流 |
输出流OutputStream
输入流的最上级对象是OutputStream(抽象类)。有以下方法:
方法 | 返回值 | 说明 | 备注 |
---|---|---|---|
write(int oneByte) | void | 写入单个内容 | abstract,抽象方法 |
write(byte[] buffer) | void | 写入一个byte b[] | |
write(byte[] buffer, int offset, int count) | void | 写入一个byte b[],限定offset开始count长的部分 | |
flush() | void | 清空缓存区 | |
close() | void | 关闭输出流 |
输入/输出流实现对象
ByteArrayInputStream 和 ByteArrayOutputStream
字符数组的输入输出流:
名称 | 上级继承关系 | 说明 | 核心 | 备注 |
---|---|---|---|---|
ByteArrayInputStream | InputStream | byte数组的输入流 | 本质: protected byte buf[] 多单位read时使用: System.arraycopy(buf, pos, b, off, len) |
|
ByteArrayOutputStream | OutputStream | byte数组的输出流 | 本质: protected byte buf[] 多单位write时使用: System.arraycopy(buf, pos, b, off, len) |
PipedInputStream 和 PipedOutputStream
管道通讯输入输出流:
名称 | 上级继承关系 | 说明 | 核心 | 备注 |
---|---|---|---|---|
PipedInputStream | InputStream | 管道通讯的输入流 | 本质: protected byte buffer[] |
同PipedOutputStream配合使用,使用connect(PipedOutputStream src)连接 |
PipedOutputStream | OutputStream | 管道通讯的输出流 | 本质: private PipedInputStream sink; |
同PipedInputStream配合使用,使用connect(PipedInputStream snk)连接 |
ObjectInputStream 和 ObjectOutputStream
对象的输入输出流:
能适应各自各样的对象类型的输入和输出。
名称 | 上级继承关系 | 实现接口 | 说明 | 备注 |
---|---|---|---|---|
ObjectInputStream | InputStream | ObjectInput, ObjectStreamConstants | 对象的输入流 | |
ObjectOutputStream | OutputStream | ObjectOutput, ObjectStreamConstants | 对象的输出流 |
对应各自类型的方法:
类型 | ObjectInputStream | ObjectOutputStream | 备注 |
---|---|---|---|
基本 | void write(int value) void write(byte[] buffer, int offset, int length) |
int read() int read(byte[] buffer, int offset, int length) |
-- |
boolean | void writeBoolean(boolean value) | boolean readBoolean() | -- |
Byte | void writeByte(int value) void writeBytes(String value) |
byte readByte() | -- |
Char | void writeChar(int value) void writeChars(String value) |
char readChar() | -- |
Double | void writeDouble(double value) | double readDouble() | -- |
field(域) | void writeFields() | ObjectInputStream.GetField readFields() | -- |
Float | void writeFloat(float value) | float readFloat() | -- |
Int | void writeInt(int value) | int readInt() | -- |
Long | void writeLong(long value) | long readLong() | -- |
Object | final void writeObject(Object object) | final Object readObject() | 注意,只有序列化的bean对象可以走输入输出流 |
Short | void writeShort(int value) | short readShort() | -- |
UTF | void writeUTF(String value) | String readUTF() | -- |
Unshared | void writeUnshared(Object object) | Object readUnshared() | -- |
--- | --- | String readLine() | 读取一行 |
--- | --- | void readFully(byte[] dst) void readFully(byte[] dst, int offset, int byteCount) |
读取全部 |
FileInputStream和FileOutputStream
文件输入输出流:
名称 | 上级继承关系 | 说明 | 核心 | 备注 |
---|---|---|---|---|
FileInputStream | InputStream | 文件的输入流 | 本质: private final FileDescriptor fd |
|
FileOutputStream | OutputStream | 文件的输出流 | 本质: private final FileDescriptor fd |
注意:
- 文件输入输出流的本质是FileDescriptor,这是文件的描述类。File类实际上是一个路径类,而FileDescriptor则描述一个文件对象,文件的嵌套字。注:FileDescriptor.out就是标准输出流,new FileOutputStream(FileDescriptor.out)之后,可以用这个输出流输出到控制台。
- 标准的输出流中write没发直降输出一个字符串,不太方便。可以new PrintStream(OutputStream out)来创建一个PrintStream对象,然后用print方法输出各种对象。
- FilterInputStream和FilterOutputStream用于封装输入输出流
相关扩展类:
名称 | 上级继承关系 | 说明 | 核心 | 备注 |
---|---|---|---|---|
BufferedInputStream | FilterInputStream | 文件的输入流的扩展,带有缓存功能 | 本质: protected volatile byte buf[] |
|
BufferedOutputStream | FilterOutputStream | 文件的输出流的扩展,带有缓存功能 | 本质: protected byte buf[] |
|
DataInputStream | FilterInputStream | 文件的输入流的扩展,有各种类型的read | --- | |
DataOutputStream | FilterOutputStream | 文件的输出流,有各种类型的write | --- | |
PrintStream | FilterOutputStream | 打印输出流 | --- |