] Java: эффективное использование памяти ByteArrayOutputStream [

] [

] У меня на диске есть файл размером 40 МБ, и мне нужно «отобразить» его в памяти с помощью байтовый массив. [

] [

] Сначала я подумал, что лучше всего будет записать файл в ByteArrayOutputStream, но я обнаружил, что в какой-то момент во время операции копирования это занимает около 160 МБ кучи. [

] [

] Кто-нибудь знает способ лучше. чтобы сделать это, не используя в три раза размер ОЗУ? [

] [

][] Обновление: [] Спасибо за ваши ответы. Я заметил, что могу уменьшить потребление памяти, указав, что начальный размер ByteArrayOutputStream немного больше, чем исходный размер файла (используя точный размер с моим кодом принудительно перераспределяет, нужно проверить, почему). [

] [

] Есть еще одно место с высоким объемом памяти: когда Я получаю byte [] обратно с помощью ByteArrayOutputStream.toByteArray. Взглянув на его исходный код, я вижу, что он клонирует массив: [

] [
public synchronized byte toByteArray()[] {
    return Arrays.copyOf(buf, count);
}
] [

] Я думаю, что могу просто расширить ByteArrayOutputStream и переписать этот метод, чтобы напрямую вернуть исходный массив. Есть ли здесь какая-либо потенциальная опасность, учитывая, что поток и массив байтов не будут использоваться более одного раза? [

]
16
задан Charles 17 November 2011 в 17:17
поделиться