1

我正在开发一个 HTTP 服务器/客户端,我目前可以通过它发送小文件,例如 .txt 文件和其他不需要太多内存的易于阅读的文件。但是,当我想发送更大的文件时,比如 .exe 或大 .pdf,我会遇到内存错误。这是因为在我尝试发送或接收文件之前,我必须指定我的 byte[] 缓冲区的大小。有没有办法在从流中读取缓冲区时获取缓冲区的大小?

我想做这样的事情:

//Create the stream.
private Stream dataStream = response.GetResponseStream();

//read bytes from stream into buffer.
byte[] byteArray = new byte[Convert.ToInt32(dataStream.Length)];
dataStream.read(byteArray,0,byteArray.Length);

但是,当调用“dataStream.Length”时会引发错误:

 ExceptionError: This stream does not support seek operations.

有人可以就如何从流中获取字节 [] 的长度提供一些建议吗?

谢谢,

4

2 回答 2

2

您可以使用CopyTo的方法。

MemoryStream m = new MemoryStream();
dataStream.CopyTo(m);
byte[] byteArray = m.ToArray();

也可以直接写入文件

var fs = File.Create("....");
dataStream.CopyTo(fs);
于 2013-07-04T20:01:45.790 回答
1

网络层无法知道响应流有多长。

但是,服务器应该告诉您它有多长;查看Content-Length响应标头。
如果该标题丢失或不正确,那么您就不走运了;您需要继续阅读,直到数据用完。

于 2013-07-04T19:51:34.770 回答