我正在使用Android的SpringFramework来获取我的输入流。
@Override
public InputStream getImageStream(String url) {
InputStream is = new ByteArrayInputStream(template.getForObject(url, byte[].class));
return is;
}
对于前几个输入流,它可以正常运行。没有问题,但是,我认为它试图获得一个非常大的输入流。所以我得到了outofmemory错误。
我看到很多帖子使用类似下面的代码:
public byte[] readBytes(InputStream inputStream) throws IOException {
ByteArrayOutputStream byteBuffer = new ByteArrayOutputStream();
int bufferSize = 1024;
byte[] buffer = new byte[bufferSize];
int len = 0;
while ((len = inputStream.read(buffer)) != -1) {
byteBuffer.write(buffer, 0, len);
}
byte[] byteArray= byteBuffer.toByteArray();
return byteArray;
}
这段代码的想法是以块的形式读取输入流吗?
但是我得到的outofmemory错误是在我甚至可以启动readBytes方法之前。我试着把重置放到各处...我想也许我应该在读取或读取之后清除内存。但我不知道如何,我不知道这是不是正确的方法?
我认为我的基础错误了吗?我是android和java的新手......有没有办法让InputStream采用另一种方式?我还读了一些关于BufferedInputStream的内容,但我想不出一种适合它的方法。
我的目标是在数据库中存储图像的blob。我的输入是通过oauth的imgurl。
我还可以通过另一个网址调用较低质量版本的输入流。一切正常...... 但是我想用原始图片网址尝试一下,因为之后我想要能够下载一张用于打印照片的原件。
答案 0 :(得分:0)
由于在使用ByteArrayInputStream
时读取内存中的整个数据,因此出现OutOfMemory错误。另请注意,当您在ByteArrayOutputStream
中写入时,它也会将数据保存在内存中(它只是字节数组的简单包装)。可能你应该使用FileOutputStream
代替缓存。