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
  • 相关阅读:
    Elasticsearch Query DSL 整理总结(三)—— Match Phrase Query 和 Match Phrase Prefix Query
    Elasticsearch Query DSL 整理总结(二)—— 要搞懂 Match Query,看这篇就够了
    Elasticsearch Query DSL 整理总结(一)—— Query DSL 概要,MatchAllQuery,全文查询简述
    Elasticsearch Java Rest Client API 整理总结 (三)——Building Queries
    Elasticsearch date 类型详解
    python 历险记(五)— python 中的模块
    python 历险记(四)— python 中常用的 json 操作
    python 历险记(三)— python 的常用文件操作
    Elasticsearch Java Rest Client API 整理总结 (二) —— SearchAPI
    Elasticsearch Java Rest Client API 整理总结 (一)——Document API
  • 原文地址:https://www.cnblogs.com/changfanchangle/p/8953923.html
Copyright © 2011-2022 走看看