gpt4 book ai didi

java - 如何确定 BufferedReader 的确切状态?

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:29:13 25 4
gpt4 key购买 nike

我有一个 BufferedReader(由 new BufferedReader(new InputStreamReader(process.getInputStream())) 生成)。我对 BufferedReader 的概念很陌生,但在我看来,它具有三种状态:

  1. 一行正在等待读取;调用 bufferedReader.readLine 将立即返回此字符串。
  2. 流已打开,但没有行等待读取;调用 bufferedReader.readLine 将挂起线程,直到有一行可用为止。
  3. 流已关闭;调用 bufferedReader.readLine 将返回 null。

现在我想确定 BufferedReader 的状态,这样我就可以确定我是否可以在不挂起我的应用程序的情况下安全地读取它。底层进程(见上文)是出了名的不可靠,因此可能已经挂起;在这种情况下,我不希望我的主机应用程序挂起。因此我正在实现一种超时。我试着先用线程来做这件事,但它变得非常复杂。

调用 BufferedReader.ready() 不会区分上述情况 (2) 和 (3)。换句话说,如果 ready() 返回 false,则可能是流刚刚关闭(换句话说,我的底层进程正常关闭)或者可能是底层进程挂起。

所以我的问题是:如何在不实际调用 readLine 的情况下确定我的 BufferedReader 处于这三种状态中的哪一种?不幸的是,我不能只调用 readLine 来检查它,因为它会打开我的应用程序直至挂起。

我使用的是 JDK 1.5 版。

最佳答案

有一种状态,缓冲区中可能有一些数据,但不一定足以填满一行。在这种情况下,ready() 将返回 true,但调用 readLine() 会阻塞。

您应该能够轻松构建自己的 ready()readLine() 方法。您的 ready() 实际上会尝试建立一条线,并且只有在成功完成后才会返回 true。然后您的 readLine() 可以返回完整的行。

关于java - 如何确定 BufferedReader 的确切状态?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2124102/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com