Я обновляю старый код, чтобы получить некоторые двоичные данные из URL-адреса, а не из базы данных (данные будут перемещены из базы данных и будут доступны по HTTP вместо этого). API базы данных, казалось, предоставлял данные в виде необработанного байтового массива напрямую, и рассматриваемый код записывал этот массив в файл, используя BufferedOutputStream.
Я совсем не знаком с Java, но небольшое прибегание к поиску подсказало мне следующий код:
URL u = new URL("my-url-string");
URLConnection uc = u.openConnection();
uc.connect();
InputStream in = uc.getInputStream();
ByteArrayOutputStream out = new ByteArrayOutputStream();
final int BUF_SIZE = 1 << 8;
byte[] buffer = new byte[BUF_SIZE];
int bytesRead = -1;
while((bytesRead = in.read(buffer)) > -1) {
out.write(buffer, 0, bytesRead);
}
in.close();
fileBytes = out.toByteArray();
Кажется, это работает большую часть времени, но у меня проблема, когда копируемые данные большие - я получаю ошибку OutOfMemoryError для элементов данных, которые хорошо работали со старым кодом.
Я предполагаю, что это потому, что в этой версии кода одновременно хранится несколько копий данных, тогда как в исходном коде этого не было.
Есть ли простой способ получить двоичные данные из URL-адреса и сохранить их в файле, не неся при этом затрат на несколько копий в памяти?