整理 Java I/O (八):字符串流 - StringReader/StringWriter

字符串是我们开发中经常用到的东西,Java 针对字符串也有专门的输入输出流:

  • StringReader

  • StringWriter

StringReader

一个数据源是字符串的流,提供读取、跳过、标记等方法。

构造方法

  • StringReader(String s)

    创建一个新字符串 reader。

其他方法

  • close()

    关闭该流并释放与之关联的所有系统资源。

  • mark(int readAheadLimit)

    标记流中的当前位置。

  • markSupported()

    判断此流是否支持 mark() 操作以及支持哪一项操作。

  • read()

    读取单个字符。

  • read(char[] cbuf, int off, int len)

    将字符读入数组的某一部分。

  • ready()

    判断此流是否已经准备好用于读取。

  • reset()

    将该流重置为最新的标记,如果从未标记过,则将其重置到该字符串的开头。

  • skip(long ns)

    跳过流中指定数量的字符。

StringWriter

StringWriter 内部有一个 StringBuffer 对象作为其缓冲区。可以利用其缓冲区中的内容来构造字符串。

构造方法

  • StringWriter()

    使用默认初始字符串缓冲区大小创建一个新字符串 writer。

  • StringWriter(int initialSize)

    使用指定初始字符串缓冲区大小创建一个新字符串 writer。

其他方法

  • append(char c)

    将指定字符添加到此 writer。

  • append(CharSequence csq)

    将指定的字符序列添加到此 writer。

  • append(CharSequence csq, int start, int end)

    将指定字符序列的子序列添加到此 writer。

  • close()

    关闭 StringWriter 无效。

  • flush()

    刷新该流的缓冲。

  • getBuffer()

    返回该字符串缓冲区本身。

  • toString()

    以字符串的形式返回该缓冲区的当前值。

  • write(char[] cbuf, int off, int len)

    写入字符数组的某一部分。

  • write(int c)

    写入单个字符。

  • write(String str)

    写入一个字符串。

  • write(String str, int off, int len)

    写入字符串的某一部分。

StringWriter 对象的关闭方法不执行任何内容,所以调用该方法不会执行任何效果。

简单示例

public class StringIOTest {
    private StringReader reader;
    private StringWriter writer;

    public static void main(String[] args) {
        new StringIOTest().testStringIO();
    }

    private void testStringIO() {
        try {
            String str = "我见过只有那合久的分了,没见过分久的合";
            reader = new StringReader(str);
            writer = new StringWriter();

            char[] arr = new char[2];
            int length = 0;
            reader.skip(2);
            reader.reset();
            while ((length = reader.read(arr)) != -1) {
                writer.write(arr, 0, length);
                writer.flush();
            }

            System.out.println(writer.getBuffer().toString());
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }
}
Copyright© 2020-2022 li-xyz 冀ICP备2022001112号-1