【问题标题】:Reading data from a unix device从 Unix 设备读取数据
【发布时间】:2010-06-10 17:27:44
【问题描述】:

在我的一台 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();
        }
    }
}  

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

【问题讨论】:

  • 你实际上是如何初始化bsr的?你肯定不会像你说的那样做。
  • “ls -l /dev/ap”的输出结果是什么?
  • BufferedReader bsr = new BufferedReader(new FileReader("/dev/ap")
  • ls -l /dev/ap 显示它是到 /dev/ttyaa02 的链接

标签: java unix device


【解决方案1】:

您的方法看起来不错,但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();

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

【讨论】:

  • 显然,需要将此dev视为需要javacomm的串行端口。
  • @Jim Jones:这绝非易事。 :-) 我在上面添加了一些链接。
  • 是的,事实上,我想我必须使用 RXTX,因为它是一个虚拟串行端口。
猜你喜欢
  • 2013-11-24
  • 2013-08-21
  • 2016-12-07
  • 1970-01-01
  • 2013-03-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-10-09
相关资源
最近更新 更多