Android将流转换为字节数组内存异常

时间:2017-03-31 15:08:19

标签: java android

我遇到了在尝试将输入流转换为字节数组时出现内存异常的情况。在较新的Android手机上它没有问题,但其中一些更便宜的型号正在体验它。这是我正在使用的方法。有没有更有效的方法来做到这一点?

assets

3 个答案:

答案 0 :(得分:1)

看看IOUtils是否可以帮助你。

导入

import org.apache.commons.io.IOUtils;

然后尝试:

public byte[] convertStreamToByteArray(InputStream is) throws IOException {
    ByteArrayOutputStream baos = new ByteArrayOutputStream();
    IOUtils.copy(is, baos);
    return baos.toByteArray();
} 

答案 1 :(得分:1)

有,不要将流中的所有数据复制到内存中。

为什么需要这样做?

在没有将整个数据保存在内存中的情况下,您是否无法读取和使用流数据?

如果你需要一些缓冲,尽可能小的缓冲区可以消耗/处理它并抛弃那个缓冲区并创建一个新缓冲区,这样你就可以尽可能少地使用内存。

答案 2 :(得分:0)

尝试创建一个大小为InputStream的字节数组,如下所示:

public byte[] convertStreamToByteArray(InputStream is) throws IOException {
    ByteArrayOutputStream baos = new ByteArrayOutputStream();
    byte[] buff = new byte[is.available()];
    int i = 0;
    while ((i = is.read(buff, 0, buff.length)) > 0) {
        baos.write(buff, 0, i);
    }
    return baos.toByteArray();

}