Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/26.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# 在.NET中,将流(长度未知)转换为字节数组的最佳方法?_C#_.net_Stream_Bytearray_Named Pipes - Fatal编程技术网

C# 在.NET中,将流(长度未知)转换为字节数组的最佳方法?

C# 在.NET中,将流(长度未知)转换为字节数组的最佳方法?,c#,.net,stream,bytearray,named-pipes,C#,.net,Stream,Bytearray,Named Pipes,我有以下代码从流(在本例中是从命名管道)读取数据并将其读入字节数组: // NPSS is an instance of NamedPipeServerStream int BytesRead; byte[] StreamBuffer = new byte[BUFFER_SIZE]; // size defined elsewhere (less than total possible message size, though) MemoryStream MessageStream = new

我有以下代码从流(在本例中是从命名管道)读取数据并将其读入字节数组:

// NPSS is an instance of NamedPipeServerStream

int BytesRead;
byte[] StreamBuffer = new byte[BUFFER_SIZE]; // size defined elsewhere (less than total possible message size, though)
MemoryStream MessageStream = new MemoryStream();

do
{
    BytesRead = NPSS.Read(StreamBuffer, 0, StreamBuffer.Length);
    MessageStream.Write(StreamBuffer, 0, BytesRead);
} while (!NPSS.IsMessageComplete);

byte[] Message = MessageStream.ToArray(); // final data
请你看一下,让我知道是否可以做得更有效或更整洁?使用MemoryStream看起来有点混乱。谢谢

厚颜无耻地抄袭

公共静态字节[]已就绪(流)
{
字节[]缓冲区=新字节[32768];
使用(MemoryStream ms=new MemoryStream())
{
while(true)
{
int read=stream.read(buffer,0,buffer.Length);

如果(读)p>看起来你的当前解决方案很好。如果你想让代码看起来更干净,你可以考虑把它打包成一个扩展方法。
int read = stream.Read (buffer, 0, buffer.Length);

如果没有可用数据,此行将永远阻塞。Read是一个阻塞函数,它将阻塞线程,直到它读取至少一个字节,但如果没有数据,它将永远阻塞。

这将读取到流的末尾,但目的是只读取到
IsMessageComplete
。感谢文章的链接;看起来我在做几乎相同的算法,但是在循环中有不同的终止条件。有趣的是,在你发表文章之前,我从来没有听说过扩展方法。谢谢你的提示和我的code@derek-“贝蒂,我该如何处理这些问题?”伊凡德罗伊斯梅尔·阿比诺回答了这个问题。哦,对不起,德里克·贝蒂。/cc@阿比诺
int read = stream.Read (buffer, 0, buffer.Length);