您认为"理想"用于将某种文件类型读入我的应用程序的设计模式。
我希望能够在不同的地方重用代码,所以很明显我想在一个单独的dll中使用它,但是虽然我没有问题将文件名或流传递到代码中,但推荐的是什么用于处理读取数据的设计模式。
从内存管理的角度来看,将所有数据读入数组并将其传递出去显然并不理想,但我能想到的另一种方法是在读取记录时引发事件,但这并不是感觉"对"因为我担心某些事件会误入歧途。
我确信这样做有一种非常光滑的方式,但我无法想到这一点。
由于
答案 0 :(得分:1)
格式是什么?如果是文本,传入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);
}
处理流/文本阅读器等允许他们在装饰链中使用它而不是文件;网络流,内存流,压缩/加密流等
答案 1 :(得分:0)
很难定义如此普遍的东西。您必须指定更多您真正需要的内容或文件类型。然后你可以看一下.NET Framework本身,有很多“XXXReader”类,例如:
每一个都与其他人完全不同......有些是抽象的,有些则不是,等等......