Java 1.8及以下版本的InputStream. readAllStream()等效方法

gojuced7  于 12个月前  发布在  Java
关注(0)|答案(2)|浏览(181)

我写了一个程序,从Java 9中的InputStream获取所有字节,

InputStream.readAllBytes()

字符串
现在我想导出到Java 1.8及以下,有没有等价的函数?找不到。

2izufjch

2izufjch1#

这里有一种方法可以解决这个问题,而不依赖于第三方库:

inputStream.reset();
byte[] bytes = new byte[inputStream.available()];
DataInputStream dataInputStream = new DataInputStream(inputStream);
dataInputStream.readFully(bytes);

字符串
或者,如果你不介意使用第三方(Commons IO):

byte[] bytes = IOUtils.toByteArray(is);


Guava还有助于:

byte[] bytes = ByteStreams.toByteArray(inputStream);

m3eecexj

m3eecexj2#

你可以像这样使用read方法:

public static byte[] readAllBytes(InputStream inputStream) throws IOException {
    final int bufLen = 1024;
    byte[] buf = new byte[bufLen];
    int readLen;
    IOException exception = null;

    try {
        ByteArrayOutputStream outputStream = new ByteArrayOutputStream();

        while ((readLen = inputStream.read(buf, 0, bufLen)) != -1)
            outputStream.write(buf, 0, readLen);

        return outputStream.toByteArray();
    } catch (IOException e) {
        exception = e;
        throw e;
    } finally {
        if (exception == null) inputStream.close();
        else try {
            inputStream.close();
        } catch (IOException e) {
            exception.addSuppressed(e);
        }
    }
}

字符串

相关问题