Skip to content

Latest commit

 

History

History
120 lines (97 loc) · 3.07 KB

02-FileMap.md

File metadata and controls

120 lines (97 loc) · 3.07 KB

FileMap

Консольное приложение, которое работает с файлом-БД. Путь к файлу задаётся системным свойством System.getProperty("db.file"). Из командной строки надо запускать приложение так: java -Ddb.file=/home/student/db.dat ru.fizteh.fivt.students.test.DbMain.

Приложение должно работать как в интерактивном режиме, так и в пакетном (см. задание Shell).

Приложение должно поддерживать следующие команды с фиксированным выводом:

put

put key value

Если значение новое, то вывод:

new

Если значение затирает существующее:

overwrite
old value

get

get key

Если значение есть:

found
value

Если значения нет:

not found

remove

remove key

Если значение удалено:

removed

Если значения нет:

not found

list

list

Выводит список всех ключей или пустую строку, если ничего нет:

key1, key2, kеy3

exit

exit

Вариант 1

Данные лежат в бинарном файле следующего формата:

Длина ключа 1, ключ 1, длина значения 1, значение 1,
Длина ключа 2, ключ 2, длина значения 2, значение 2,
...

Форматы длин - целые числа в машинном представлении, 4 байта. Формат ключа и значения - байты, полученные из строки в кодировке UTF-8.

Пример

add key value
add ключ значение

В файле должно оказаться (в бинарном виде):

00000008 d0bad0bb d18ed187 00000010
d0b7d0bd d0b0d187 d0b5d0bd d0b8d0b5
00000003 6b657900 00000576 616c7565

Вариант 2

Данные лежат в бинарном файле следующего формата:

Ключ 1, \0, смещение значения 1,
Ключ 2, \0, смещение значения 2,
...
Ключ N, \0, смещение значения N,
значение 1, значение 2, ...

Форматы смещений - целые числа в машинном представлении, 4 байта. Формат ключа - байты, полученные из строки в кодировке UTF-8. Оканчивается ключ нулевым символом (\0). Между списком смещений и первым значением нет разрыва.

Пример

add key value
add ключ значение

В файле должно оказаться (в бинарном виде):

d0bad0bb d18ed187 00000000 156b6579
00000000 25d0b7d0 bdd0b0d1 87d0b5d0
bdd0b8d0 b576616c 7565