Я работаю со сторонней системой, которая предоставляет аудиофайлы и различные фрагменты данных об аудиофайлах. Проблема, с которой я столкнулся, заключается в том, что фрагменты данных представляют собой объекты JSON, которые разбросаны практически случайным образом по двоичным данным аудиофайла.
Информация о том, где находится JSON и двоичные данные, не предоставляется.
Итак, один из способов справиться с этим — просто просмотреть файл, и каждый раз, когда я сталкиваюсь с {
, я пытаюсь разобрать объект json из этой точки. Если мне это удастся, я бы сохранил проанализированный объект и продолжил, в противном случае я рассматриваю двоичные данные {
и добавляю их в очередь аудио.
Я обычно использую JSON.Net для своих материалов JSON. Если я использую JsonTextReader
в своем входном потоке, я могу проанализировать свою позицию в массиве и получить то, что мне нужно. Затем я снова начал бы чтение с байта после закрытия }
Однако JsonTextReader
будет читать большими порциями за раз. Поэтому, когда я проверяю свою позицию базового потока, его позиция находится далеко за пределами закрытия }
. JsonTextReader
не имеет никаких свойств, касающихся его положения, кроме свойств Line и Char, которые было бы неудобно использовать. Однако есть закрытый член _charPos
, который предоставит мне именно то, что я хочу.
Есть ли альтернативный способ получить эту информацию, не изменяя библиотеку, не вычисляя номера строк самостоятельно или не прибегая к использованию отражения для доступа к частному члену?
IJsonLineInfo
похож наIXmlLineInfo
в том, что он дает номер строки и позицию, но не индекс символов, который был бы менее удобочитаемым, но более полезным на практике. Кстати,_charPos
- это не то, что вам нужно, это индекс в буфере_chars
. - person dbc   schedule 01.11.2018