Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/301.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何更改我的networkstream代码以将数据直接写入文件_C#_Filestream_Networkstream - Fatal编程技术网

C# 如何更改我的networkstream代码以将数据直接写入文件

C# 如何更改我的networkstream代码以将数据直接写入文件,c#,filestream,networkstream,C#,Filestream,Networkstream,我的代码是: 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, numberOfB

我的代码是:

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)
来完成文件字节的接收。有没有正确的说法代替睡眠


非常感谢

转换非常简单,我假设您在如何打开文件方面遇到了问题。
文件
类提供了许多有用的实用工具方法,以及您使用的最后一种方法,如:


至于
线程.Sleep(1)
——除非我遗漏了这里没有显示的内容——它看起来像是让处理器休息的机会,但这是毫无意义的。特别是,
Read
调用是IO绑定的,等待套接字(网络)提供输入,因此整个循环不太可能值得休眠。大多数对Thread.Sleep的调用本质上都是黑客行为。

使用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();

你试过什么?从MemoryStream到FileStream的转换是直接进行的。我不明白你的最后一句话:“大多数对线程的调用。睡眠本质上是黑客行为”。请原谅,
Thread.Sleep的有效使用很少,除非是在紧凑的处理器密集型循环中,这些循环需要强制减速,以避免以最大利用率运行CPU(处理器密集型循环是提高CPU利用率的一种方式,因为根据定义,它们不会中断,除非调度程序确定它们应该/必须中断)。我发现对
线程.Sleep
的大多数调用都是不必要的,它们只会减慢自然阻塞的速度,或者不需要减慢的速度。问问自己:为什么要停止处理?
    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();