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);