уникальные разделители при чтении файла - PullRequest
0 голосов
/ 05 сентября 2011

Я читаю файл в байтовом массиве, я вставил в него некоторую управляющую команду, которую мне нужно декодировать в каком-то другом классе. Но как идентифицировать и отделить эту информацию от остального содержимого читаемого файла. Мне нужно использовать какой-то уникальный символ в качестве разделителя для определения начала и конца этой команды управления в байтовом массиве. Есть ли какой-нибудь уникальный персонаж, который я могу использовать для этой цели? Этот конкретный символ не должен присутствовать ни в одном обычном двоичном файле любого формата.

Ответы [ 3 ]

2 голосов
/ 05 сентября 2011

Нет, если это двоичный файл, то, как правило, байт может принимать любое значение от 0 до 255.

Одно из возможных решений - зарезервировать одно конкретное значение байта в качестве символа «escape»; скажем, что вы выбираете '\' для этой цели. Затем, чтобы представить разделитель, вы можете, например, вставить последовательность "\d". Конечно, чтобы представить фактический '\', вам также нужно будет разграничить это; "\\", например.

1 голос
/ 05 сентября 2011

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

1 голос
/ 05 сентября 2011

Нет, по определению такого управляющего символа нет. Но вы можете сохранить массив в следующем формате: [длина байтового массива] [байтовый массив]. Все, что вам нужно сделать, это прочитать в целое число <- длина, создать новый массив этой длины и прочитать его полностью. </p>


EDIT:

Хорошо, используйте следующий формат:

Имя файла заканчивается на ноль, так что вы знаете разделитель (это работает, потому что имя файла только ASCII!). Затем у вас есть длина (целое / длинное), а затем байтовый массив.

Все другие методы, упомянутые выше, небезопасны, и если вы используете сложный разделитель, тогда: он не идеален и занимает больше места, чем при использовании простой переменной длины ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...