Пожалуйста, не стесняйтесь исправить меня, если я ошибаюсь в любой момент ...Каков наиболее эффективный способ реализации ReadLine() для бинарного потока?
Я пытаюсь прочитать файл CSV (значения, разделенные запятыми), используя классы ввода/вывода .NET. Теперь проблема заключается в том, что этот CSV-файл может содержать некоторые поля с мягкими возвратами каретки (т. Е. Одиночные \ r или \ n маркеры, а не стандартные \ r \ n, используемые в текстовых файлах для завершения строки) в некоторых полях и в стандартном текстовом режиме Класс I/O StreamReader не соблюдает стандартное соглашение и рассматривает возврат мягкой каретки, поскольку жесткие каретки возвращают, что ставит под угрозу целостность файла CSV.
Теперь использование класса BinaryReader является единственной опцией, но BinaryReader не имеет функции ReadLine(), поэтому необходимо реализовать ReadLine() самостоятельно.
Мой текущий подход считывает один символ из потока за раз и заполняет StringBuilder до получения \ r \ n (игнорируя все остальные символы, включая одиночные \ r или \ n), а затем возвращает строковое представление StringBuilder (используя ToString()).
Но мне интересно: это самый эффективный способ реализации функции ReadLine()? Пожалуйста, просветите меня.
Когда вы говорите «стандартное соглашение», вы должны понимать, что это не особенно стандартно. В Unix «\ n» - это нормальный ограничитель строк, сам по себе. – 2008-11-21 13:10:52
У вас действительно есть проблема с перфомансом или это типичный случай преждевременной оптимизации? ;). Я не видел, что вы упоминаете первичную проблему. – 2008-11-21 13:10:58
@ Jon - Да, я знаю, спасибо. Я имел в виду стандарт на windows/dos. – 2008-11-21 13:39:13