У меня возникли трудности с пониманием прочитанной записи с помощью MappedByteBuffer. Вот класс, который у меня есть, который читает содержимое локального файла и допускает изменение его содержимого. Я использую java версию 8.MappedByteBuffer запись в файл не работает
public class MappedByteBufferExample {
public static void main(String[] args) {
try (RandomAccessFile file = new RandomAccessFile("resources\\MappedByteBufferExample.txt", "rw");
FileChannel fileChannel = file.getChannel();) {
long size = fileChannel.size();
MappedByteBuffer mappedBuffer = fileChannel.map(MapMode.READ_WRITE, 0, size);
System.out.println("Text from File : -----");
while (mappedBuffer.remaining() > 0) {
System.out.print((char) mappedBuffer.get());
}
System.out.println("\n");
for (int index = 0; index < (mappedBuffer.limit()/2); index++) {
byte b1 = mappedBuffer.get(index);
byte b2 = mappedBuffer.get(mappedBuffer.limit() - index - 1);
mappedBuffer.put(index, b2);
mappedBuffer.put(mappedBuffer.limit() - index - 1, b1);
}
//mappedBuffer.force(); I tried with this but no change in result.
//mappedBuffer.load(); I tried with this but no change in result.
mappedBuffer.load();
mappedBuffer.flip();
System.out.println("Text Reversed : -----");
while (mappedBuffer.remaining() > 0) {
System.out.print((char) mappedBuffer.get());
}
} catch (IOException e) {
e.printStackTrace();
}
}}
Содержимое файла - Розы красные!
Исполняя этот вывод файла в консоли:
Текст из файла: -----
Розы красные!
Текст Перевернутый: -----
DER эпоха sesoR
Но содержимое файла не изменяется. На выполнении этой программы на второй раз, выход на консоль:
Текст из файла: -----
DER эпоха sesoR
Текст Перевернутый: -----
Розы красные!
Содержимое файла по-прежнему не изменилось. Я пробовал методы load() и force() по одному и оба, но без изменений в результате Вот мои вопросы:
1) Почему содержимое локального файла не изменяется?
2) Какие изменения необходимо выполнить этой программе для записи данных в файл?
3) Почему/Как MappedByteBuffer считывает обратный текст на второй итерации, хотя содержимое файла не отменено?
Нагрузка и флип не нужны. 'flip' просто необходим для println, поскольку он сбрасывает позицию чтения. Однако только при закрытии текст записывается обратно (в данном случае). «\ r \ n» станет «\ n \ r». –
Вы не представили никаких доказательств того, что файл не изменен, и основные доказательства того, что это так. – EJP