Чтение данных с устройства Unix - PullRequest
2 голосов
/ 10 июня 2010

На одном из моих серверов RedHat Linux было настроено несколько устройств./ dev / ap и / dev / reuter.Это новостные ленты AP и Reuters.В командной строке Unix я могу сделать «cat / dev / ap», и он ждет, пока сообщение не придет в канал и распечатает его на стандартный вывод.Как только в потоке возникает пауза, кот завершается.Я попробовал «больше» и получил те же результаты, то же самое с меньшим -f (полное сообщение может быть удачей), а хвост -f не вывел в течение часа.

Я знаю, что это потоки, но когда я пытаюсь открыть Java BufferReader на новом Reader ("/ dev / ap"), я не получаю вывод.Используя следующий метод запуска:

public void run() {
    String line = null;
    while(true) {
        try {
            while((line = bsr.readLine()) != null) {
                System.out.println(line);
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}  

Пара вопросов:
1. Ограничены ли некоторые команды unix открытием потоков из файлов?например, хвост?2. Что я делаю неправильно на стороне Java, что я не могу захватить вывод?Неверный тип потока, неправильный тип оболочки?Jim

1 Ответ

4 голосов
/ 10 июня 2010

Ваш подход кажется здравым, но readLine() очень точен в отношении того, что составляет строку текста. Вы можете посмотреть на сырой поток:

cat /dev/ap | hexdump -C

Вы также можете попробовать read(), как показано в этом фрагменте, который читается с /dev/zero:

BufferedReader in = new BufferedReader(new FileReader("/dev/zero"));
for (int i = 0; i < 10; i++) {
    System.out.print(in.read() + " ");
}
System.out.println();
in.close();

Добавление: для последовательного ввода-вывода рассмотрим RXTX или похожих библиотек.

...