Какой формат? Если это текст, передача в TextReader
была бы идеальной; а для xml - XmlReader
. Если это произвольный двоичный код, передайте Stream
.
Для больших данных идеальным подходом , где это возможно , является чтение данных без буферизации, т. Е. Не загружать их все в память. Блоки итераторов здесь могут быть полезны, например, вот глупый пример, показывающий чтение строк (но он также может легко yield return
объекты, построенные из данных в потоке):
public IEnumerable<string> ReadLines(TextReader source)
{
string s;
while ((s = source.ReadLine()) != null)
yield return s;
}
очевидно, что в общем случае для каждого элемента может потребоваться гораздо больше обработки!
У вызывающей стороны теперь есть лениво буферизированный небуферизованный источник ваших данных, например:
using(var file = File.OpenRead(path))
{
foreach(var customer in YourSpiffyParser(file))
DoSomethingFun(customer);
}
А обработка потока / читателя текста и т. Д. Позволяет им использовать его в цепочке декораторов с другими вещами, кроме файлов; сетевые потоки, потоки в памяти, сжатие / криптопотоки и т. д.