Java 从unix设备读取数据

Java 从unix设备读取数据,java,unix,device,Java,Unix,Device,在我的一台RedHat Linux服务器上安装了两台设备/dev/ap和/dev/reuter。它们是美联社和路透社的新闻源。在unix命令行中,我可以执行“cat/dev/ap”,它会等待消息从提要中下来并打印到stdout。一旦流中出现暂停,cat就会完成。我尝试了“更多”并得到了同样的结果,同样的结果是少-f(完整的味精,可能很幸运),而tail-f在一个小时内没有输出 我知道这些是流,但当我尝试在新的阅读器(“/dev/ap”)上打开Java BufferReader时,我没有得到任何输

在我的一台RedHat Linux服务器上安装了两台设备/dev/ap和/dev/reuter。它们是美联社和路透社的新闻源。在unix命令行中,我可以执行“cat/dev/ap”,它会等待消息从提要中下来并打印到stdout。一旦流中出现暂停,cat就会完成。我尝试了“更多”并得到了同样的结果,同样的结果是少-f(完整的味精,可能很幸运),而tail-f在一个小时内没有输出

我知道这些是流,但当我尝试在新的阅读器(“/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命令是否仅限于从文件打开流?e、 g.尾巴? 2.我在Java方面做错了什么,我不能捕获输出? 错误的流类型,错误的包装类型?
Jim

你的方法似乎很合理,但对一行文字的构成非常挑剔。您可以查看原始流:

cat /dev/ap | hexdump -C
您也可以尝试,如从
/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();
BufferedReader-in=newbufferedreader(newfilereader(“/dev/zero”);
对于(int i=0;i<10;i++){
System.out.print(in.read()+);
}
System.out.println();
in.close();

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

您实际上是如何初始化<代码> BSR < /代码>的?你肯定没有按你说的那样做。作为“ls-l/dev/ap”的输出,你得到了什么?BufferedReader bsr=new BufferedReader(new FileReader(“/dev/ap”)ls-l/dev/ap表明它显然是指向/dev/ttyaa02a的链接,需要将此开发视为需要javacomm的串行端口。@Jim Jones:这从来都不容易。:-)我在上面添加了一些链接。是的,事实上,我想我必须使用RXTX,因为它是一个虚拟串行端口。