Записывайте большие файлы, используя класс RandomAccessFile.JAVA

Программисты JAVA общаются здесь
Ответить
Anonymous
 Записывайте большие файлы, используя класс RandomAccessFile.

Сообщение Anonymous »

Мне нужно скопировать большие файлы (ГБ) в другой файл (контейнер), и меня интересует производительность и использование оперативной памяти.

Чтение всего исходного файла например:

RandomAccessFile f = new RandomAccessFile(origin, "r");
originalBytes = new byte[(int) f.length()];
f.readFully(originalBytes);


А позже скопируйте все в контейнер следующим образом:

RandomAccessFile f2 = new RandomAccessFile(dest, "wr");
f2.seek(offset);
f2.write(originalBytes, 0, (int) originalBytes.length);


все делает в памяти, верно? Таким образом, копирование больших файлов может повлиять на память и привести к исключению OutOfMemory?

Лучше ли читать исходный файл побайтно, а не целиком?
Как мне поступить в таком случае?
Заранее спасибо.

РЕДАКТИРОВАТЬ:
После ответа Мехди Майка я наконец нашел решение:
Я могу использовать RandomAccessFile в качестве места назначения, как захочу, и поскольку у RandomAccessFile есть метод «getChannel», который возвращает FileChannel, я могу передать его следующему методу, который выполнит копию (32 КБ за раз) файла в нужной мне позиции:

public static void copyFile(File sourceFile, FileChannel destination, int position) throws IOException {
FileChannel source = null;
try {
source = new FileInputStream(sourceFile).getChannel();
destination.position(position);
int currentPosition=0;
while (currentPosition < sourceFile.length())
currentPosition += source.transferTo(currentPosition, 32768, destination);
} finally {
if (source != null) {
source.close();
}

}
}


Подробнее здесь: https://stackoverflow.com/questions/544 ... file-class
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «JAVA»