Java 1.8及以下版本等效于InputStream.readAllBytes()

时间:2019-11-26 10:55:46

标签: java java-8 inputstream

我编写了一个程序,该程序使用

Java 9 从InputStream获取所有字节,

InputStream.readAllBytes()

现在,我想将其导出到 Java 1.8及更低版本。有等效功能吗?找不到一个。

2 个答案:

答案 0 :(得分:0)

InputStream.readAllBytes()可用,因为Java 9而不是Java 7 ...

除此之外,您(没有第三方)可以:

byte[] bytes = new byte[(int) file.length()];
DataInputStream dataInputStream = new DataInputStream(new FileInputStream(file));
dataInputStream .readFully(bytes);

或者如果您不介意使用第三方(Common IO):


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

番石榴也有帮助:

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

答案 1 :(得分:0)

您可以像这样使用旧的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);
        }
    }
}