为什么无法重新打开关闭的(标准)流?

2023-12-09

System.in是提供用户输入数据的“标准”输入流。一旦关闭,该流就无法重新打开。一个这样的例子是使用扫描仪读取用户输入,如下所示:

public class Test {
    public static void main(String[] args) {

        boolean finished;

        do {
            Scanner inputScanner = new Scanner(System.in);
            finished = inputScanner.hasNext("exit");
            boolean validNumber = inputScanner.hasNextDouble();
            if (validNumber) {
                double number = inputScanner.nextDouble();

                System.out.print(number);
            } else if (!finished) {
                System.out.println("Please try again.");
            }
            inputScanner.close();
        } while (!finished);
    }
}

在此示例中,类型的实例Scanner创建并用于从用户读取一系列数字(请忽略此代码中超出本示例范围的其他详细信息,我知道应该在循环之外创建和关闭扫描仪)。从用户输入中检索到数字后,此实例Scanner(即输入流)被关闭。但是,当用户请求另一个号码并创建新实例时,无法再次打开输入流。在此示例中,它会创建一个无限循环。

问题是:为什么不可能重新打开关闭的流?


为什么 Java 中无法重新打开关闭的流?

这就是 Java 流所代表的底层操作系统构造的本质。流本质上是一个数据管道。一旦你关闭它,它就不再存在。您也许能够在相同的端点之间创建一个新的端点,但这会产生一个根本不同的流。我们可以考虑诸如缓冲和流定位之类的实现考虑因素,但这些实际上都是次要问题。

您还专门询问了标准流。这些是您无法重新创建的一些情况。操作系统为每个进程提供了一组标准流。一旦关闭,就无法获得等价物。您可以将不同的流放在它们的位置,但不能将它们连接到原始端点。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

为什么无法重新打开关闭的(标准)流? 的相关文章

随机推荐