StringReader类的使用

Posted 二木成林

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了StringReader类的使用相关的知识,希望对你有一定的参考价值。

概述

字符串输入流,其本质就是字符串。StringWriter的使用请参考:StringWriter类的使用

构造方法

构造方法说明
public StringReader(String s)创建一个新的StringReader。

常用方法

成员方法说明
void ensureOpen()检查以确保流是打开的,如果流关闭了则抛出异常。
int read()读取流中的单个字符,返回的该字符对应的int值。如果已到达流的末尾,则返回-1。
int read(char cbuf[], int off, int len)读取len个字符到chars数组中,从chars数组中的下标off开始存储,返回实际存储的字符数。
long skip(long ns)跳过流中指定数量的字符,返回跳过的字符数。ns参数可以为负数,但需要注意使用。
boolean ready()告诉这个流是否准备好被读取,如果保证下一个read()不会阻塞输入,则返回true。
boolean markSupported()告诉这个流是否支持mark()操作,它一定支持,因为该方法就只返回true。
void mark(int readAheadLimit)标记流中的当前位置。 对 reset() 的后续调用会将流重新定位到这一点。
void reset()将流重置为最近的标记(即mark()标记的位置),如果从未标记过,则重置为字符串的开头。
void close()关闭流并释放与其关联的任何系统资源。 一旦流关闭,进一步的 read()、ready()、mark() 或 reset() 调用将抛出 IOException。 关闭已关闭的流没有任何效果。

实例

public class Test {
    public static void main(String[] args) throws IOException {
        // 创建StringReader实例对象
        String str = "Hello World";
        StringReader sr = new StringReader(str);

        // read()方法,从流中读取字符
        int sc = sr.read();// 读取单个字符,若到流末尾则返回-1
        System.out.println((char) sc);
        char[] chars = new char[1024];
        int num = sr.read(chars, 0, str.length());// 读取len个字符到chars数组中,从chars数组中的下标off开始存储,返回实际存储的字符数
        System.out.println(new String(chars, 0, num));// 注意,这里输出的是"ello World",因为第一个字符"H"已经被读取了

        // reset()方法
        sr.reset();// 将流重置为最近的标记,如果从未标记过,则重置为字符串的开头。
        num = sr.read(chars, 0, str.length());
        System.out.println(new String(chars, 0, num));// 输出结果为整个字符串,即"Hello World"

        // close()方法,关闭流无效,关闭后调用该类的其他方法会抛出异常java.io.IOException: Stream closed
        sr.close();
        // sr.read();
    }
}

以上是关于StringReader类的使用的主要内容,如果未能解决你的问题,请参考以下文章

在这种情况下是否有必要关闭StringReader?

StringReader 和 for 循环之间的速度比较。 (将字符串转换为 jaxb 对象时)

字符串流stringReader

如何将 inputsource 转换为 inputstream 并将其作为参数提供给 stringreader?

[二十]JavaIO之StringReader 与 StringWriter

Jekyll 偏移代码片段高亮的初始行