Java | Фишки и трюки
7.21K subscribers
182 photos
29 videos
6 files
40 links
Java: примеры кода, интересные фишки и полезные трюки

Купить рекламу: https://telega.in/c/java_tips_and_tricks

✍️По всем вопросам: @Pascal4eg
Download Telegram
⌨️ Memory-mapped buffer: эффективная работа с файлами

Memory-mapped buffer — это механизм, предоставляемый Java NIO, который позволяет отображать файл в памяти, так что его содержимое становится доступным для чтения и записи как массив байтов. Это позволяет работать с файлами напрямую через память, что часто значительно увеличивает производительность операций ввода-вывода (I/O).

🔍 Почему это быстрее?
1️⃣ Файл загружается в память через виртуальную память ОС.
2️⃣ Операции чтения/записи проходят без необходимости копирования данных между потоками.
3️⃣ Доступ к данным осуществляется так же, как и в обычном массиве.

📌 Пример чтения файла:

import java.io.IOException;
import java.io.RandomAccessFile;
import java.nio.MappedByteBuffer;
import java.nio.channels.FileChannel;

public class MemoryMappedBufferExample {
public static void main(String[] args) throws IOException {
try (RandomAccessFile file = new RandomAccessFile("example.txt", "r");
FileChannel channel = file.getChannel()) {

// Сопоставляем файл с памятью
MappedByteBuffer buffer = channel.map(FileChannel.MapMode.READ_ONLY, 0, channel.size());

// Читаем данные из буфера
for (int i = 0; i < buffer.limit(); i++) {
System.out.print((char) buffer.get());
}
}
}
}


🔗 Ключевые моменты:
1️⃣ Режимы READ_ONLY, READ_WRITE, PRIVATE определяют доступ к файлу.
2️⃣ Объём сопоставления ограничен размером доступной памяти.
3️⃣ Подходит для работы с большими файлами (до гигабайтов).

Когда использовать?
- Для высокопроизводительного чтения/записи данных.
- При обработке больших логов или бинарных файлов.
- Когда нужно работать с файлами как с массивами.

#Java #MemoryMappedBuffer #nio
Please open Telegram to view this post
VIEW IN TELEGRAM
👍101🕊1