• IO笔记(下)--字符单位的输出输出流


    之前的字节输入输出流能适应任意清空,但实际使用中,我们大多用的还是字节的。

    先上继承关系图:
    图片摘自:http://www.cnblogs.com/skywang12345/p/io_01.html

    输入流Reader

    字符输入流的最上级对象是Reader(抽象类)。有以下方法:

    方法 返回值 说明 备注
    read(char cbuf[], int off, int len) int 基础核心的读取 核心,abstract,抽象方法
    read(java.nio.CharBuffer target) int 读取
    read() int 读取
    read(char cbuf[]) int 读取
    skip(long n) long 跳过字符
    ready() boolean 判断是否可以读取
    markSupported() boolean 判断是否支持标记
    mark(int readAheadLimit) void 标记 mark和reset配合使用
    reset() void 重置
    close() void 关闭流

    另外:

    1. 包含protected Object lock;的内部成员,用于加锁,保证同步。

    输出流Writer

    方法 返回值 说明 备注
    write(char cbuf[], int off, int len) void 核心,abstract,抽象方法
    write(int c) void 写入 ---
    write(char cbuf[]) void 写入 ---
    write(String str) void 写入 ---
    write(String str, int off, int len) void 写入 ---
    append(char c) Writer 连续写入 支持append(XXX).append(XXX)
    append(CharSequence csq) Writer 连续写入 参数可为String,支持append(XXX).append(XXX)
    append(CharSequence csq, int start, int end) Writer 连续写入 参数可为String,支持append(XXX).append(XXX)
    flush() void 情况缓存 ---
    close() void 关闭 ---

    另外:

    1. 包含protected Object lock;的1. 内部成员,用于加锁,保证同步。
    2. 包含private char[] writeBuffer;的内部成员,自带缓存。
    3. CharSequence是String的接口,所以append(CharSequence csq)这种可以

    输入/输出流实现对象

    ByteArrayInputStream 和 ByteArrayOutputStream

    字符数组的输入输出流:

    名称 上级继承关系 说明 核心 备注
    CharArrayReader Reader char数组的输入流 本质:
    protected char buf[]
    CharArrayWriter Writer char数组的输出流 本质:
    protected char buf[]

    注:
    本身就是字符数组,实际上和ByteArrayInputStream与ByteArrayOutputStream非常相似。

    PipedReader和PipedWriter

    管道通讯输入输出流:

    名称 上级继承关系 说明 核心 备注
    PipedReader Reader 管道通讯的输入流 本质:
    char buffer[]
    同PipedWriter配合使用
    PipedWriter Writer 管道通讯的输出流 本质:
    private PipedReader sink;
    同PipedReader配合使用

    InputStreamReader和OutputStreamWriter

    字符输入输出流:

    名称 上级继承关系 说明 核心 备注
    InputStreamReader Reader 字符输入流 本质:
    private final StreamDecoder sd;
    new InputStreamReader(InputStream in)的方式创建,从字节流转换,算是一种扩展
    OutputStreamWriter Writer 字符输出流 本质:
    private final StreamEncoder se;
    new OutputStreamWriter(OutputStream out)的方式创建,从字节流转换,算是一种扩展

    注:
    想进行字符串的话,更加的扩展是PrintWriter,new PrintWriter(new FileOutputStream(file))的方式使用。

    FileReader和FileWriter

    文件字符输入输出流:

    名称 上级继承关系 说明 核心 备注
    FileReader InputStreamReader 文件字符输入流 本质:
    完全是调用的InputStreamReader
    FileWriter OutputStreamWriter 文件字符输出流 本质:
    完全是调用的FileOutputStream

    BufferedReader和BufferedWriter

    缓冲字符输入输出流:

    名称 上级继承关系 说明 核心 备注
    BufferedReader Reader 缓冲字符输入流 本质:
    private char cb[]
    有readLine(),可以很方便的读取一行
    BufferedWriter Writer 缓冲字符输出流 本质:
    private char cb[]
    注意,write写入后,不会马上反应,调用flush()清空缓存后反应

  • 相关阅读:
    CF819B Mister B and PR Shifts
    HDU5969 最大的位或
    UVA1464 Traffic Real Time Query System
    [SCOI2010]连续攻击游戏
    [USACO11JAN] Roads and Planes
    [POJ3613] Cow Relays(Floyd+矩阵快速幂)
    洛谷P3237 [HNOI2014]米特运输(树形dp)
    awk 正则表达式、正则运算符详细介绍
    awk单行脚本快速参考
    Project Euler 44: Find the smallest pair of pentagonal numbers whose sum and difference is pentagonal.
  • 原文地址:https://www.cnblogs.com/changfanchangle/p/8966845.html
Copyright © 2020-2023  润新知