字节输入流与输出流类库详解

理了一遍java.io基于字节操作的I/O:InputStreamOutputStream。做了点笔记,以便参考。

字节输入流InputStream

按字节读取,每次可以读取一个字节或者字节数组
包含一个抽象方法read()

//子类必须实现该方法,返回从InputStream中读取的下一个字节(0-255);或者-1(到达流的末尾)
public abstract int read() throws IOException;

其他的重载方法包括

//从InputStream中读取若干字节到字节数组b中,返回的是实际读取的字节数
public int read(byte b[]) throws IOException;
//从InputStream off位置开支读取长度为len的字节到字节数组中,返回的是实际读取的字节数
public int read(byte b[], int off, int len) throws IOException;

类图:


字节输入流与输出流类库详解_第1张图片
InputStream类图

java.io.InputStream (implements java.io.Closeable)

  • java.io.ByteArrayInputStream 内部包含一个字节数组缓冲区byte buf[]
  • java.io.FileInputStream 内部包含一个FileDescriptor,从文件中读入字节,可用于读取图像,否则使用FileReader
  • java.io.FilterInputStream 内部包含一个其他InputStream in,作为它的数据来源,它覆写了InputStream的所有方法,将对它的方法调用传递给内部的in的相应方法来操作,静态代理模式
    • java.io.BufferedInputStream FilterInputStream的子类,内部有个字符数组缓冲区byte buf[],默认缓冲区大小为8M (int DEFAULT_BUFFER_SIZE = 8192)。同时支持标记mark和重置reset
    • java.io.DataInputStream (implements java.io.DataInput) FilterInputStream的子类,支持对Java基本类型的读取readInt(), readLong(), etc
    • java.io.LineNumberInputStream FilterInputStream的子类,支持访问lineNumber
    • java.io.PushbackInputStream FilterInputStream的子类,支持重读之前读过的字节unread()
  • java.io.ObjectInputStream (implements java.io.ObjectInput, java.io.ObjectStreamConstants) 只有实现了Serializable或者Externalizable的对象可以通过这种流读取
  • java.io.PipedInputStream 配合PipedOutputStream src使用,写入src的内容可以被PipedInputStream读出
  • java.io.SequenceInputStream 多个InputStream串联起来,从第一个读完之后,接着从第二个开始读...
  • java.io.StringBufferInputStream 从指定的字符串构建出一个InputStream
字节输出流OutputStream

按字节写入,每次写入一个字节或者字节数组
关键抽象方法write(int b)

//子类必须实现write方法
public abstract void write(int b) throws IOException; 
//其他重载方法
public void write(byte b[]) throws IOException;
public void write(byte b[], int off, int len) throws IOException;

OutputStream 的类结构基本与InputStream 对应
类图:

字节输入流与输出流类库详解_第2张图片
OutputStream类图

java.io.OutputStream (implements java.io.Closeable, java.io.Flushable)

  • java.io.ByteArrayOutputStream
  • java.io.FileOutputStream
  • java.io.FilterOutputStream
    • java.io.BufferedOutputStream
    • java.io.DataOutputStream (implements java.io.DataOutput)
    • java.io.PrintStream (implements java.lang.Appendable, java.io.Closeable) 常用的System.out, System.error就是只这种类型, 提供对基本类型的写入print(int), print(char), etc, 支持格式化printf(), println(), etc
//System class定义中
public final static PrintStream out = null;
public final static PrintStream err = null;
  • java.io.ObjectOutputStream (implements java.io.ObjectOutput, java.io.ObjectStreamConstants)
  • java.io.PipedOutputStream

引用
Hierarchy For Package java.io
Java IO 类图

你可能感兴趣的:(字节输入流与输出流类库详解)