我写了C#windows存储应用程序,我通过套接字接收数据。 我想知道,java DataInptStream.ReadFully()是否有任何C#quivalent方法。 正如这里所写http://www.tutorialspoint.com/java/io/datainputstream_readfully.htm
方法从输入流中读取字节并将其分配到 缓冲阵列b。
它会阻塞,直到出现下列情况之一: b.length字节的输入数据可用。 C#中是否有任何等效方法?那个woul会等到字节长度可用吗?
答案 0 :(得分:5)
这里缺少Java文档中的一些文本,但据我所知,您需要一个方法来准确读取缓冲区大的字节数,或者在抛出某种异常时失败。
BinaryReader.ReadBytes
(No One建议)的行为不是这样的:
包含从基础流读取的数据的字节数组。这个 可能小于结束时请求的字节数 流已到达。
据我所知,没有其他方法具有等效行为,但您可以使用extension method创建它:
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();
}
}
然后,您可以使用该扩展方法,就好像它是Stream
类的一部分一样,假设您已导入其定义的命名空间:
byte[] buffer = new byte[8192];
myNetworkStream.ReadFully(buffer);
答案 1 :(得分:0)
也许您正在寻找binary reader