gpt4 book ai didi

java - 如何在没有 OutOfMemory 错误的情况下从 FileInputStream 获取字节数组

转载 作者:太空宇宙 更新时间:2023-11-03 11:51:00 26 4
gpt4 key购买 nike

我有一个 FileInputStream,它有 200MB 的数据。我必须从输入流中检索字节。

我正在使用以下代码将 InputStream 转换为字节数组。

private byte[] convertStreamToByteArray(InputStream inputStream) {
ByteArrayOutputStream bos = new ByteArrayOutputStream();
try {
int i;
while ((i = inputStream.read()) > 0) {
bos.write(i);
}
} catch (IOException e) {
e.printStackTrace();
}
return bos.toByteArray();
}

我在将如此大的数据转换为字节数组时遇到 OutOfMemory 异常。

请让我知道将 InputStream 转换为字节数组的任何可能解决方案。

最佳答案

为什么要把200MB的文件放在内存中?你打算用字节数组做什么?

如果您要将其写入 OutputStream,请先准备好 OutputStream,然后一次读取 InputStream 一个 block ,边读边将 block 写入 OutputStream。您永远不会在内存中存储比 block 更多的内容。

例如:

     public static void pipe(InputStream is, OutputStream os) throws IOException {

int read = -1;
byte[] buf = new byte[1024];

try {
while( (read = is.read(buf)) != -1) {
os.write(buf, 0, read);
}
}
finally {
is.close();
os.close();
}
}

此代码将采用两个流并将一个流传输到另一个流。

关于java - 如何在没有 OutOfMemory 错误的情况下从 FileInputStream 获取字节数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15825865/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com