Java 如何告诉BufferedReader停止从System.in读取?

Java 如何告诉BufferedReader停止从System.in读取?,java,io,java.util.scanner,bufferedreader,Java,Io,Java.util.scanner,Bufferedreader,我正在使用bufferedReader从用户处读取System.in,用户将输入一个由空格分隔的域地址和源地址 eg auckland.ac.nz. 198.19.20.44 www.esc.auckland.ac. 173.27.28.93 stat.auckland.ac.nz. 52.159.152.105 student.auckland.ac.nz. 64.247.240.232 现在的问题是,一旦用户完成输入数据,输入流不会终止,因此程序不会执行。我已经为BufferedRead

我正在使用bufferedReader从用户处读取System.in,用户将输入一个由空格分隔的域地址和源地址

eg 
auckland.ac.nz. 198.19.20.44
www.esc.auckland.ac. 173.27.28.93
stat.auckland.ac.nz. 52.159.152.105
student.auckland.ac.nz. 64.247.240.232
现在的问题是,一旦用户完成输入数据,输入流不会终止,因此程序不会执行。我已经为BufferedReader编写了一些代码,如果有人愿意检查它并告诉我哪里出了问题,我将不胜感激。注意这两个变量“count”和“n”,我是否可以用它们来帮助解决这个问题

     try {
        String fqdn, src, key, temp;
        Integer count;
        int n = 0;

        while ((temp = br.readLine()) != null){
            int divide = temp.indexOf(" ");
            fqdn = temp.substring(0, divide); // divide the input 
            src = temp.substring(divide+1);
            key = fqdn + " " + src;
            //System.out.printf("%d: %s\n", n, key);
            dht.lookup(key);
            n += 1;
        } 
        br.close();
    } catch (NoSuchElementException e) {
        //System.out.printf("end-of-file\n");    
    }

readLine()
返回
null
时,循环将终止。发生这种情况的唯一方法是关闭标准输入。用户可以通过键入Ctrl+D来实现这一点,但对于典型用户来说,这可能太多了。一个简单的选择是让他们在完成时键入“完成”;然后,您的循环应该检查该值,而不是
null

我要查看的是
观察者模式
和多读相关内容,如
wait()
-使用以下链接:


看看这里:

你好,欧内斯特。谢谢你。实际上,我将在自动用户输入(比如从生成输入的计算机)上测试它,这样它就不能在最后包含“done”或CTRL-D。还有其他方法吗?@Jay:你试图实现它的方式,必须有用户的指示,表明它已经完成了输入。比如一个终止字符/字符串或者输入的数量应该是已知的等等。我不知道计算机在我的代码上运行的输入数量,因为它是随机的。一旦不再提供输入,它就无法自动关闭吗?如果程序正在从管道读取数据——即,
javamyclass
——那么它应该能正常工作;标准输入应该在文件的末尾关闭。而且,正如我所说的,您可以编写程序,在输入sentinel值(例如,单词“done”)时停止。这对用户输入或自动输入都是一样的。我不知道计算机会在我的代码上运行多少个输入,因为它是随机的。一旦不再提供输入,它就无法自动关闭吗?您需要以某种方式设置超时时间。我不知道怎么做:)