如何检查我是否有内容要在StreamReader上阅读

本文关键字:StreamReader 何检查 检查 是否 | 更新日期: 2023-09-27 18:28:13

我需要检查我的客户端缓冲区中是否有东西,所以我没有等待编写它。

private async void ThreadMethod_ListenClient()
    {
        while (true) {
            if (ClientQueue.Count == 0)
                continue;
            Client client = (Client)ClientQueue.Dequeue ();
            if (client.Reader != null) {
                string Say = await client.Reader.ReadLineAsync();
                if (Say != null) {
                    if (Say.Length != 0) {
                        Console.WriteLine (Say);
                    }
                }
            }
            ClientQueue.Enqueue (client);
        }
    }

客户。读取器:来自 TcpClient 的流读取器

客户。套接字 : Tcp客户端

如何检查是否"客户端。读者是空的?

C# with Mono

如何检查我是否有内容要在StreamReader上阅读

StreamReader.Peek(),当到达文件末尾或没有要读取的内容时返回-1。可以按如下方式检查:

while(StreamReader.Peek() != -1){
    //Your code here
}

如何检查我是否有内容要在流阅读器上阅读?

我不知道StreamReader,但对于TcpClient您可以使用TcpClient.GetStream()返回NetworkStream而该方法又具有 DataAvailable 属性。这在TcpClient.GetStream文档的"备注"部分中进行了说明:

可以通过检查 DataAvailable 属性来避免阻止读取操作。

编辑:我已经发布了这个,因为你的代码正在运行一个特定的域。虽然其他答案/评论中描述的一般方法适用于正常的有限流(如FileStreamMemoryStream等(,但它不适用于像NetworkStream这样的无限流。

StreamReader.ReadLine()方法返回null如果流的末尾已到达或没有剩余的内容要读取。因此,您可以检查它以验证是否有要阅读的内容。

if (client.Reader != null && client.Reader.ReadLine() != null)