Когда у вас есть смесь текстовых данных и двоичных данных, вы должны рассматривать все как двоичные. Это означает, что вы должны использовать необработанный Stream
доступ или что-то подобное и использовать двоичные API-интерфейсы для просмотра текстовых данных (часто ища cr / lf / crlf для байт в качестве часовых, хотя это звучит как в вашем случае вы можете просто найти $$$$
, используя двоичные API, затем декодировать весь блок и сканировать вперед). Когда вы думаете, что у вас есть целая строка, вы можете использовать Encoding
для разбора каждой строки - наиболее удобным API является encoding.GetString().
Когда вы закончите просматривать текстовые данные как двоичные , затем вы можете продолжить анализ двоичных данных , снова используя двоичный API. Я бы обычно рекомендовал бы против BinaryReader
и здесь, потому что, честно говоря, это не дает вам намного больше, чем более прямой API. Другая проблема , о которой вы, возможно, захотите подумать, - это постоянство ЦП, но при условии, что это не проблема: BitConverter.ToSingle()
может быть вашим другом.
Если данные скромного размера, вам может быть проще использовать byte[]
для данных; либо через File.ReadAllBytes
, либо взяв в аренду негабаритный byte[]
из пула массивов, и загрузив его из FileStream
. API Stream
неудобен для такого рода сценариев, потому что как только вы посмотрите на данные: они исчезли - поэтому вам нужно поддерживать свои собственные обратные буферы. API конвейеров идеально подходит для этого, когда имеешь дело с большими данными, но является продвинутой версией c.