zoukankan      html  css  js  c++  java
  • 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
  • 相关阅读:
    lcx
    交换网络中存在的攻击及加固方法概括
    Hello world~
    CCSPSECURE1 安全理论
    SQL注入经验总结
    Access Control List
    初探java集合框架图
    深入浅出分析LinkedHashMap
    红黑树实现分析
    深入浅出的分析TreeMap
  • 原文地址:https://www.cnblogs.com/changfanchangle/p/8953923.html
Copyright © 2011-2022 走看看