Как десериализовать или восстановить двоичный сериализованный словарь, который не закончил сериализацию?

2

Когда я использовал свое приложение, поближе, он попытался сериализовать словарь объемом 300 КБ. Из-за отсутствия дискового пространства он мог писать только 292 КБ. Есть ли способ успешно десериализовать все, что там есть?

Я использовал BinaryFormatter, и если я потерял некоторые элементы таким образом, лучше, чем потерять весь словарь.

Когда я десериализуюсь, я получаю это исключение:

    e.Message   "The input stream is not a valid binary format. The starting contents (in bytes) are: 20-01-20-20-20-FF-FF-FF-FF-01-20-20-20-20-20-20-20 ..."
Теги:
serialization
binaryformatter

1 ответ

2

Выделение бинарных потоков действительно требует больших знаний о реализации. BinaryFormatter является проприетарным, поэтому... если эти данные не являются действительно ценными, может быть дешевле считать его потерянным. Вы можете сделать много scrobbling, но это будет нелегко, и время разработки не дешево.

Я не говорю, что это невозможно сделать. FWIW, я могу думать о способах сделать это для некоторых других сериализаторов - просто не BinaryFormatter.

  • 0
    Спасибо Марк. Что вы имеете в виду под скробблингом? Вы имеете в виду, как с помощью регулярных выражений? Я вижу информацию, которая мне нужна, в формате ascii, который я могу использовать для ее извлечения, а затем добавить ее в новый файл с помощью регулярных выражений, но не уверен, что это будет надежно? Кроме того, когда вы сказали, что это частная собственность, вы имеете в виду код мудрый? Вы можете видеть, как они сделали это, используя отражатель, верно? Кроме того, какие сериализаторы сделали бы это возможным? Xml? (Хотя они не поддерживают словари)
  • 1
    Под «скробблингом» я подразумеваю грязную работу. Да, вы можете использовать отражатель; Я не уверен, что это делает это намного проще. Большинство текстовых форматов будет достаточно легко усечь; также несколько бинарных файлов, которые имеют открытые форматы.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню