我正在使用 SpringFramework for Android 来获取我的输入流。
@Override
public InputStream getImageStream(String url) {
InputStream is = new ByteArrayInputStream(template.getForObject(url, byte[].class));
return is;
}
对于前几个输入流,一切正常。完全没有问题,但是,我认为它试图获得一个非常大的输入流。所以我得到了内存不足的错误。
我看到很多帖子使用以下代码:
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;
}
这段代码的想法是分块读取输入流,对吗?
但是我得到的内存不足错误是在我启动 readBytes 方法之前。我尝试将重置无处不在......我想也许我应该在读取字节或其他东西之后清除内存。但我不知道怎么做,我不知道这是否是正确的方法?
我觉得我的基础错了?我对android和java很陌生......有没有办法让InputStream另一种方式?我还阅读了有关 BufferedInputStream 的一些内容,但我想不出一种适合它的方法。
我的目标是将图像的 blob 存储在数据库中。我的输入是通过 oauth 的 imgurl。
我还可以通过另一个 url 调用质量较低的输入流版本。然后一切正常......但我想尝试使用原始图像网址,因为也许以后我希望能够下载原件以打印照片。