我的代码是:
byte[] buffer = new byte[1024];
int numberOfBytesRead = 0;
MemoryStream receivedData = new MemoryStream();
do
{
numberOfBytesRead = serverStream.Read(buffer, 0, buffer.Length); //Read from network stream
receivedData.Write(buffer, 0, numberOfBytesRead); //Write to memory stream
Thread.Sleep(1);
} while (serverStream.DataAvailable);
File.WriteAllBytes(@"C:\file.png", receivedData.ToArray());
我想将它从MemoryStream转换为FileStream,我不知道。
以及为什么我必须使用Thread.Sleep(1)
来完成接收文件的字节。是否有正确的陈述而不是睡眠。
非常感谢
答案 0 :(得分:0)
转换非常简单,我假设您在如何打开文件时遇到问题。 File
类除了使用最后一个之外,还提供了许多有用的实用方法,例如File.OpenWrite
:
FileStream receivedData = File.OpenWrite(@"C:\file.png");
至于Thread.Sleep(1)
- 除非我遗漏了这里未显示的内容 - 看起来有机会让处理器休息,但这是毫无意义的。特别是,Read
调用是IO绑定在套接字(网络)上等待提供输入,因此整个循环不太可能值得睡觉。 Thread.Sleep
的大多数电话本质上都是黑客。
答案 1 :(得分:0)
使用FileStream的代码:
byte[] buffer = new byte[1024];
int numberOfBytesRead = 0;
FileStream fs = new FileStream(@"C:\file.png", FileMode.Create, FileAccess.Write);
do
{
numberOfBytesRead = serverStream.Read(buffer, 0, buffer.Length); //Read from network stream
fs.Write(buffer, 0, numberOfBytesRead);
} while (serverStream.DataAvailable);
fs.Close();