Java 读取 Reader 为 String

1.1k 记录 发表评论

本文讲述如何在 Java 中将 Reader 转换成 String

共三种方式:纯Java使用 Guava 库以及使用Apache Commons IO库

1 纯 Java 方式

如是是用纯 Java 代码从 Reader 中读取 String 的代码:

@Test
public void givenUsingPlainJava_whenConvertingReaderIntoStringV1_thenCorrect() 
  throws IOException {
    StringReader reader = new StringReader("text");
    int intValueOfChar;
    String targetString = "";

    while ((intValueOfChar = reader.read()) != -1) {
        targetString += (char) intValueOfChar;
    }

    reader.close();
}

如果内容很大,用批量读取加上StringBuffer的方式:

@Test
public void givenUsingPlainJava_whenConvertingReaderIntoStringV2_thenCorrect() 
  throws IOException {
    Reader initialReader = new StringReader("text");
    char[] arr = new char[8 * 1024];
    StringBuilder buffer = new StringBuilder();
    int numCharsRead;

    while ((numCharsRead = initialReader.read(arr, 0, arr.length)) != -1) {
        buffer.append(arr, 0, numCharsRead);
    }

    initialReader.close();
    String targetString = buffer.toString();
}

2 Guava 库方式

谷歌的 Guava 提供了一个工具类来读取 Reader 中的内容:

@Test
public void givenUsingGuava_whenConvertingReaderIntoString_thenCorrect() 
  throws IOException {
    Reader initialReader = CharSource.wrap("With Google Guava").openStream();
    String targetString = CharStreams.toString(initialReader);
    initialReader.close();
}

3 Commons IO 库方式

Apache Commons IO 也提供了直接读取 ReaderString 的工具方法:

@Test
public void givenUsingCommonsIO_whenConvertingReaderIntoString_thenCorrect() 
  throws IOException {
    Reader initialReader = new StringReader("With Apache Commons");
    String targetString = IOUtils.toString(initialReader);
    initialReader.close();
}

参考资料:

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注

昵称 *