从 unix 设备读取数据

Jim*_*nes 3 java unix device

在我的一台 RedHat Linux 服务器上已经设置了几台设备。/dev/ap 和 /dev/reuter。它们是美联社和路透社的新闻提要。在 unix 命令行中,我可以执行“cat /dev/ap”,它会一直等到消息从提要出现并将其打印到标准输出。一旦流中出现暂停, cat 就会完成。我尝试了“更多”并得到了相同的结果,同样的结果是 less -f(完整的味精,可能是运气)和 tail -f 在一个小时内没有输出。

我知道这些是流,但是当我尝试在 new Reader("/dev/ap") 上打开 Java BufferReader 时,我没有得到任何输出。使用以下运行方法:

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

几个问题:
1. 某些 unix 命令是否仅限于从文件打开流?例如尾巴?2.我在Java方面做错了什么,我无法捕获输出?错误的流类型,错误的包装器类型?吉姆

tra*_*god 5

您的方法似乎很合理,但readLine()对一行文本的构成非常讲究。您可能会查看原始流:

cat /dev/ap | hexdump -C
Run Code Online (Sandbox Code Playgroud)

您也可以尝试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();
Run Code Online (Sandbox Code Playgroud)

附录:对于串行 I/O,请考虑RXTX类似库。