如何知道流已结束C#

时间:2012-02-27 17:54:57

标签: c# stream

我正在尝试在C#中接收tcp数据包,但我不知道何时可以停止从流中读取。 这是我尝试过的:

for(int i = 0; i < stm.Length; i += chunkSize)
{
    bb = new byte[chunkSize];
    k = stm.Read(bb, 0, bb.Length);
    ns.Write(bb, 0, k);
}

但它让我误以为流不可寻找。 所以我试过这个:

int k = chunkSize;

while (k == chunkSize)
{
    bb = new byte[chunkSize];
    k = stm.Read(bb, 0, bb.Length);
    ns.Write(bb, 0, k);
}

有什么事可做吗? 谢谢:))

2 个答案:

答案 0 :(得分:4)

我们走了:

int read;
while((read = stm.Read(bb, 0, bb.Length)) > 0) {
    // process "read"-many bytes from bb
    ns.Write(bb, 0, read);
}

“read”在流的末尾将是非正数,并且仅在流的末尾。

或更简单(在4.0中):

stm.CopyTo(ns);

答案 1 :(得分:1)

二进制阅读器是您需要的,因为它确切地知道要读取多少字节!

它是字节长度的前缀,因此它知道要读多少!