Java IO(十四) CharArrayReader 和 CharArrayWriter

Java IO(十四) CharArrayReader 和 CharArrayWriter

一、介绍

CharArrayReader 和 CharArrayWriter 是字符数组输入流和字符数组输出流,它们同 ByteArrayIuputStream 和 ByteArrayOutputStream 类似,只不过一个是字节流,一个是字符流。CharArrayReader 和 CharArrayWriter 内部维护了一个字符数组,用来缓存数据。

  • CharArrayReader:字符数组输入流,继承于 Reader,用于读取字符数组,操作的数据是以字符为单位。
  • CharArrayWriter :字符数组输出流,继承于 Writer,用于写入字符数组,操作的数据是以字符为单位。

二、构造方法

(一)、CharArrayReader 

(二)、CharArrayWriter

三、常用API

(一)、CharArrayReader 

(二)、CharArrayWriter

四、实例

public class CharArrayDemo {
    private static char[] chs = new char[] 
            {'a','b','c','d','e','f','g','h','i','j','k','l','m',
            'n','o','p','q','r','s','t','u','v','w','x','y','z'};
    
    public static void main(String[] args) {
        write();
        read();
    }

    /**
     * CharArrayWriter 测试
     */
    public static void write() {
        CharArrayWriter out = null;
        try {
            out = new CharArrayWriter();
            out.write(chs);// 写入字符数组
            out.write('A');// 写入字符 A
            out.write(chs, 10, 10);// 从索引10开始,写入10个字符
            out.write("ABCDEFGHIJKLMN", 5, 5);// 写入字符串的一部分
            /*
             * ① 写入0
             * ② 接着写入 123456789
             * ③ 写入字符串的一部分
             */
            out.append('0').append("123456789").append(String.valueOf(chs), 5, 10);
        } catch (Exception e) {
            e.printStackTrace();
        }finally {
            try {
                if(out != null)
                    out.close();
            }catch(Exception e) {
                e.printStackTrace();
            }
        }
    }
    
    /**
     * CharArrayReader 测试
     */
    public static void read() {
        
        CharArrayReader in = null;
        char[] buf = new char[10];
        int len = 0;
        try {
            in = new CharArrayReader(chs);
            for(int i = 0;i < 3;i++) {
                if(in.ready())
                    System.out.println("read() : " + (char)in.read());// 读取一个字符输出
            }
            if (!in.markSupported()) {
                System.out.println("mark not supported");
                return;
            }
            len = in.read(buf);// 读取并缓存到字符数组
            System.out.println("read(buf) : " + new String(buf,0,len));
            in.mark(0);// 标记0位置
            in.skip(5);// 跳过5个字符
            len = in.read(buf, 0, 10);// 读取字符数组一部分
            System.out.println("read(buf, 0, 10) : " + new String(buf,0,len));
            in.reset();// 重置
            len = in.read(buf, 0, 10);// 读取字符数组一部分
            System.out.println("read(buf, 0, 10) : " + new String(buf,0,len));
        } catch (IOException e) {
            e.printStackTrace();
        }finally {
            try {
                if(in != null)
                    in.close();
            }catch(Exception e) {
                e.printStackTrace();
            }
        }
    }
}
原文地址:https://www.cnblogs.com/lingq/p/12929848.html