我正在开发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.
有人可以提供一些建议,告诉我如何从流中获取byte []的长度吗?
谢谢,
答案 0 :(得分:2)
您可以使用流的CopyTo
方法。
MemoryStream m = new MemoryStream();
dataStream.CopyTo(m);
byte[] byteArray = m.ToArray();
您也可以直接写入文件
var fs = File.Create("....");
dataStream.CopyTo(fs);
答案 1 :(得分:1)
网络层无法知道响应流的持续时间。
然而,服务器应该告诉你它有多长;查看Content-Length
响应标题
如果那个标题丢失或不正确,那你就不走运了;你需要继续阅读,直到你的数据用完为止。