Как сказать BufferedReader прекратить чтение из System.in? - PullRequest
3 голосов
/ 03 октября 2011

Я использую 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");    
    }

Ответы [ 2 ]

4 голосов
/ 03 октября 2011

Цикл завершится, когда readLine() вернет null. Единственный способ, которым это произойдет, если стандартный ввод закрывается. Пользователь может сделать это, набрав Ctrl + D , но, возможно, это слишком много, чтобы спросить у обычного пользователя. Одна из простых альтернатив - попросить их набрать «готово», когда они готовы; тогда ваш цикл должен проверить это значение, а не null.

2 голосов
/ 03 октября 2011

На что я смотрю, так это Observer Pattern http://en.wikipedia.org/wiki/Observer_pattern и многоадресные публикации, такие как wait() - используйте эту ссылку: Как установить таймаут для BufferedReader на основе URLConnection в Java?

и посмотрите здесь: http://www.javaspecialists.eu/archive/Issue153.html

...