0

我正在使用 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 调用质量较低的输入流版本。然后一切正常......但我想尝试使用原始图像网址,因为也许以后我希望能够下载原件以打印照片。

4

1 回答 1

0

您收到 OutOfMemory 错误,因为您在使用ByteArrayInputStream. 另请注意,当您写入时,ByteArrayOutputStream它也会将数据保存在内存中(它只是字节数组的简单包装器)。可能您应该FileOutputStream改为使用缓存。

于 2013-08-07T22:44:19.493 回答