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