Bor*_*sky 1 c# sockets stream windows-store-apps
我写的是C#windows store应用程序,我通过Sockets接收数据.我想知道,java DataInptStream.ReadFully()是否有任何C#quivalent方法.正如这里所写http://www.tutorialspoint.com/java/io/datainputstream_readfully.htm
方法从输入流中读取字节并将其分配到缓冲区数组b中.
它会阻塞,直到出现以下条件之一:输入数据的b.length个字节可用.C#中是否有任何等效方法?那个woul会等到字节长度可用吗?
这里缺少Java文档中的一些文本,但据我所知,您需要一个方法来准确读取缓冲区大的字节数,或者在抛出某种异常时失败.
BinaryReader.ReadBytes
(由No One建议)不是这样的:
包含从基础流读取的数据的字节数组.这可能小于达到流末尾时请求的字节数.
据我所知,没有其他方法具有等效行为,但您可以使用扩展方法创建它:
public static void ReadFully(this Stream stream, byte[] buffer)
{
int offset = 0;
int readBytes;
do
{
// If you are using Socket directly instead of a Stream:
//readBytes = socket.Receive(buffer, offset, buffer.Length - offset,
// SocketFlags.None);
readBytes = stream.Read(buffer, offset, buffer.Length - offset);
offset += readBytes;
} while (readBytes > 0 && offset < buffer.Length);
if (offset < buffer.Length)
{
throw new EndOfStreamException();
}
}
Run Code Online (Sandbox Code Playgroud)
然后,您可以使用该扩展方法,就好像它是Stream
类的一部分一样,假设您已导入其定义的命名空间:
byte[] buffer = new byte[8192];
myNetworkStream.ReadFully(buffer);
Run Code Online (Sandbox Code Playgroud)