【发布时间】:2016-08-03 15:11:36
【问题描述】:
我有一些大型数据文件,我可以使用专门为此设计的 API 以大块(比如 32kb)的形式检索它们。 API 的一种用法如下:
LargeFileAPI lfa = new LargeFileAPI("file1.bin");
bool moredata = true;
List<byte[]> theWholeFile = new List<byte[]>();
while ( moredata )
{
byte[] arrayRead = new byte[32768];
moredata = lfa.Read(arrayRead);
theWholeFile.Add(arrayRead);
}
上面的问题是从它读取占用的内存与大文件的大小一样多(比如说 100Mb)。由于我想将此作为返回结果传递给 WCF 服务,因此我更愿意使用 Stream 作为服务的输出。
如何从中创建一个 Stream 对象并将其作为返回参数传递给 WCF 服务而不占用内存中的完整文件大小?
我正在考虑创建一个继承自
的类 LargeFileStreamSystem.IO.Stream
并覆盖 Read 方法。但我似乎无法弄清楚如何解决 Stream.Read 需要一个偏移量参数和要读取的字节数这一事实,因为我提到的 API 需要为每次读取读取固定数量的字节。此外,我必须重写的所有其他方法怎么样,例如 Flush()、Position 和其他任何方法。他们应该实施什么?我之所以问,是因为我不知道 Stream.Read() 之外的其他函数,当我从客户端(WCF 服务的调用者)读取流时,WCF 会调用什么函数。
此外,我需要它是可序列化的,以便它可以成为 WCF 服务的输出参数。
谢谢 圣战
【问题讨论】: