2015-03-17 5 views
0

Мне была задана задача указать формат файла для внутреннего использования внутри приложения.Есть ли какая-то комбинация байтов, которая может использоваться как разделитель потоков Int16

Одним из предполагаемых требований говорят:

В разделе данных файла должен быть составлен из ряда потоков типа Int16 значений (короткие целых), разделенный с помощью подходящей комбинации одного или нескольких байт.

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

(А также, если ответ «нет», что было бы хорошим способом определить положение и размер каждого потока в файле?)

ответ

1

Я хотел бы предложить предваряя каждый поток с полем длины , вместо того, чтобы пытаться использовать разделители, по той причине, что вы уже дали (нет подходящего уникального разделителя). Например .:

<length> 
<stream> 
<length> 
<stream> 
<length> 
<stream> 
... 

, где <length> есть, скажем, 4 байта целое число, которое задает количество 16-битовых элементов в следующем потоке.

2

Под «потоками» я предполагаю, что запрос указывает, что длина неизвестна, когда начинается запись данных.

Поэтому я бы предложил «chunked» кодировку, где каждый субпоток был разделен на части с переменным размером, причем длина каждой части была записана в начале как целое число фиксированного размера. Пустой фрагмент сигнализирует о конце подпотока. Как правило, была бы максимальная длина блока для облегчения выделения буферов для эффективного чтения и записи.

Это по образцу в HTTP-"chunked" transfer encoding и подобный подход используется во многих других форматах, такие как неопределенное кодирование длины, поддерживаемого basic encoding rules for ASN.1.

+0

Вы предполагаемое праве. Этот формат файла предназначен для инкрементной записи (добавления) во время сеанса сбора данных. Спасибо за ответ! – heltonbiker

 Смежные вопросы

  • Нет связанных вопросов^_^