Постоянный массив NIO: Java

#java #arrays #persistence #nio

#java #массивы #постоянство #nio

Вопрос:

Мне была поставлена задача создать постоянный массив NIO в моем «Продвинутом» курсе Java. Этот вопрос заключается не столько в том, «как» это сделать, сколько в том, «что» подразумевается под «постоянным NIO». Это новая концепция для меня; пока я понимаю, что в основном это просто означает, что вместо динамического хранения информации в типичном массиве в коде вы храните информацию массива на диске в виде байтов в блоках заранее определенного размера. Что меня смущает, так это то, как вы получаете информацию, которую пытаетесь сохранить, в байтах, а затем как вы записываете эти байты в файл через Java NIO?

TL; DR — Может кто-нибудь объяснить постоянный массив Java NIO в двух словах? Как мне приступить к его созданию с нуля?

Заранее спасибо за любые комментарии!

РЕДАКТИРОВАТЬ: вот описание назначения, слово в слово:

Цель

Познакомьтесь с Java NIO API.

Требования

Используйте Java NIO для создания класса PersistentArray. Класс должен поддерживать следующие методы:

static void create(String fileName, int bufferSize) — создает пустой постоянный массив

static void delete(String fileName) — удаляет постоянный массив

PersistentArray open(String fileName) — открывает файл, связанный с постоянным массивом, и подготавливает постоянный массив для операций gets и puts.

void put(int bufferID, Buffer buffer) — сохраняет буфер в местоположении bufferID (обратите внимание, что размер буфера должен совпадать с размером, используемым при создании массива).

Buffer get(int bufferID) — с учетом идентификатора буфера извлеките буфер, ранее сохраненный в местоположении, связанном с bufferID.

int getNextID() — возвращает единицу, превышающую максимальный идентификатор, когда-либо используемый для хранения буфера.

void close() — закрыть файл, связанный с постоянным массивом

Кроме того, создайте тест JUnit, показывающий, что все методы ведут себя так, как ожидалось.

Просмотрите свою работу с инструктором.

Ответ №1:

Я могу только предположить, что он / она говорит о файлах, отображенных в памяти. Использование может использовать RandomAccessFile для создания MappedByteBuffer, к которому вы можете обращаться случайным образом, как к массиву. Изменения, которые вы вносите в ByteBuffer, сохраняются.

Комментарии:

1. Я отредактировал свое первоначальное представление, чтобы включить точную формулировку задания.

2. Итак, вы хотите обернуть MappedByteBuffer. 😉

Ответ №2:

Что:
не существует такого понятия, как «постоянный массив NIO». Инструктор хочет, чтобы вы познакомились с API NIO (поскольку он лучше и быстрее, чем старый API ввода-вывода).

Теперь в контексте назначения вам необходимо реализовать этот класс, который соответствует спецификации, указанной инструктором. Никаких причуд, просто реализуйте класс, который «сохраняет» данные (в вашем случае массив) в файл с использованием nio.

Эта запись может вам помочь. Файловый ввод-вывод: старый ввод-вывод или NIO. Что лучше?

TL; DR: в постоянстве NIO нет особого смысла. Просто создайте массив, который не находится в памяти, но также сохраняет его содержимое с помощью NIO.

Как:
Теперь это может быть реализовано многими способами, ответ Питера довольно хорош, где рекомендуется использовать RandomAccessFile.

Комментарии:

1. Я бы сказал, что, начав кодировать, вы поймете больше. Код — это дизайн.