Спецификация бинарного формата YPBankBin
Обзор
Бинарный формат YPBankBin — это компактное, бинарное представление тех же данных о транзакциях, которые описаны в текстовом формате YPBankText. Файл представляет собой последовательный поток записей; каждая запись начинается с небольшого заголовка, упрощающего парсинг и проверку.
Заголовок записи
| Смещение | Размер | Поле | Описание |
|---|---|---|---|
| 0x00 | 4 байта | MAGIC | Постоянное значение 0x59 0x50 0x42 0x4E ('YPBN'), идентифицирующее заголовок записи. |
| 0x04 | 4 байта | RECORD_SIZE | Беззнаковое 32-битное целое число с прямым порядком байтов, указывающее количество следующих байт (т.е. размер тела записи). |
Все многобайтовые целые числа кодируются в формате big-endian.
Тело записи (порядок полей фиксированный)
| Поле | Размер | Тип | Примечания |
|---|---|---|---|
TX_ID | 8 байт | беззнаковое 64-битное | Уникальный идентификатор транзакции. |
TX_TYPE | 1 байт | перечисление (0 = DEPOSIT, 1 = TRANSFER, 2 = WITHDRAWAL) | |
FROM_USER_ID | 8 байт | беззнаковое 64-битное | Счёт отправителя; 0 для DEPOSIT. |
TO_USER_ID | 8 байт | беззнаковое 64-битное | Счёт получателя; 0 для WITHDRAWAL. |
AMOUNT | 8 байт | знаковое 64-битное | Сумма в наименьшей денежной единице (центах). Положительное значение для зачислений, отрицательное для списаний. |
TIMESTAMP | 8 байт | беззнаковое 64-битное | Время выполнения транзакции в миллисекундах от эпохи Unix. |
STATUS | 1 байт | перечисление (0 = SUCCESS, 1 = FAILURE, 2 = PENDING) | |
DESC_LEN | 4 байта | беззнаковое 32-битное | Длина следующего описания в кодировке UTF-8. |
DESCRIPTION | DESC_LEN байт | UTF-8 | Необязательное текстовое описание. Если описание отсутствует, DESC_LEN равен 0. |
Байты для выравнивания не вставляются; поля располагаются последовательно.
Структура файла
Файл представляет собой последовательность таких записей:
[ЗАГОЛОВОК][ТЕЛО][ЗАГОЛОВОК][ТЕЛО]...Наличие значения MAGIC в начале каждой записи позволяет читателю повторно синхронизироваться в случае потери границы записи или повреждения данных.
Last updated on