入力ストリームを取得するために Android 用の SpringFramework を使用しています。
@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 メソッドを開始する前です。どこにでもリセットを入れてみました... readbytes などの後にどこかでメモリをクリアする必要があると思いました。しかし、私はその方法がわかりませんし、それが正しい方法であるかどうかもわかりません。
私は基本的なことを間違っていると思いますか?私はAndroidとJavaが初めてです...別の方法でInputStreamを取得する方法はありますか? BufferedInputStream についても読みましたが、それに適合する方法が思いつきません。
私の目標は、画像のブロブをデータベースに保存することです。そして、私の入力は oauth 経由の imgurl です。
別の URL から入力ストリームの品質の低いバージョンを呼び出すこともできます。そして、すべてが機能します...しかし、後で写真を印刷するためにオリジナルをダウンロードできるようにしたいので、元の画像のURLで試してみたかったのです。