Reader转为字节数组

2025/04/06

1. 概述

本快速教程将展示如何使用纯Java、Guava和Apache Commons IO库将Reader转换为byte[]。

2. 普通Java

让我们从简单的Java解决方案开始-通过一个中间字符串:

@Test
public void givenUsingPlainJava_whenConvertingReaderIntoByteArray_thenCorrect() throws IOException {
    Reader initialReader = new StringReader("With Java");

    char[] charArray = new char[8 * 1024];
    StringBuilder builder = new StringBuilder();
    int numCharsRead;
    while ((numCharsRead = initialReader.read(charArray, 0, charArray.length)) != -1) {
        builder.append(charArray, 0, numCharsRead);
    }
    byte[] targetArray = builder.toString().getBytes();

    initialReader.close();
}

请注意,读取是分块进行的,而不是一次一个字符。

3. Guava

接下来让我们看看Guava解决方案-同样使用中间字符串:

@Test
public void givenUsingGuava_whenConvertingReaderIntoByteArray_thenCorrect() throws IOException {
    Reader initialReader = CharSource.wrap("With Google Guava").openStream();

    byte[] targetArray = CharStreams.toString(initialReader).getBytes();

    initialReader.close();
}

请注意,我们正在使用内置的实用程序API,而不必执行任何普通Java示例的低级转换。

4. Commons IO

最后,这里有一个通过Commons IO开箱即用的直接解决方案:

@Test
public void givenUsingCommonsIO_whenConvertingReaderIntoByteArray_thenCorrect() throws IOException {
    StringReader initialReader = new StringReader("With Commons IO");

    byte[] targetArray = IOUtils.toByteArray(initialReader);

    initialReader.close();
}

以上就是将Java Reader转换为字节数组的3种快速方法。

Show Disqus Comments

Post Directory

扫码关注公众号:Taketoday
发送 290992
即可立即永久解锁本站全部文章