c# -流.Read读空字节
本文关键字:字节 Read | 更新日期: 2023-09-27 18:05:13
从浏览器接收多部分数据(其大小大于~2KB),我开始接收空''0'字节后的前几个块是相关的,当我使用:
_Stream.Read(ByteArray, Offset, ContentLength);
但是,如果我将ContentLength分成小缓冲区(每个大约2KB) 和在每次调用Read()后添加1ms的延迟,那么它工作得很好:
for(int i = 0; i < x; i++)
{
_Stream.Read(ByteArray, Offset * i, BufferSize);
System.Threading.Thread.Sleep(1);
}
但是,添加延迟是相当慢的。如何防止读取空字节。我怎么知道浏览器写了多少字节呢?
谢谢
实际上没有收到0x00
字节,它们从未被写入。
Stream.Read()
返回实际读取的字节数,在您的情况下通常小于BufferSize
。少量数据通常以单个消息的形式到达,在这种情况下不会发生问题。
延迟可能在您的测试场景中"工作",因为到那时网络层已经缓冲了比BufferSize
数据更多的数据。它可能会在生产环境中失败。
int remaining = ContentLength;
int offset = 0;
while (remaining > 0)
{
int bytes = _Stream.Read(ByteArray, offset, remaining);
if (bytes == 0)
{
throw new ApplicationException("Server disconnected before the expected amount of data was received");
}
offset += bytes;
remaining -= bytes;
}