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

注意:

  1. 文件输入输出流的本质是FileDescriptor,这是文件的描述类。File类实际上是一个路径类,而FileDescriptor则描述一个文件对象,文件的嵌套字。注:FileDescriptor.out就是标准输出流,new FileOutputStream(FileDescriptor.out)之后,可以用这个输出流输出到控制台。
  2. 标准的输出流中write没发直降输出一个字符串,不太方便。可以new PrintStream(OutputStream out)来创建一个PrintStream对象,然后用print方法输出各种对象。
  3. FilterInputStream和FilterOutputStream用于封装输入输出流

相关扩展类:

名称 上级继承关系 说明 核心 备注
BufferedInputStream FilterInputStream 文件的输入流的扩展,带有缓存功能 本质:
protected volatile byte buf[]
BufferedOutputStream FilterOutputStream 文件的输出流的扩展,带有缓存功能 本质:
protected byte buf[]
DataInputStream FilterInputStream 文件的输入流的扩展,有各种类型的read ---
DataOutputStream FilterOutputStream 文件的输出流,有各种类型的write ---
PrintStream FilterOutputStream 打印输出流 --- print
posted @ 2018-04-26 17:31  常烦常乐  阅读(157)  评论(0编辑  收藏  举报