【发布时间】:2015-03-11 17:16:35
【问题描述】:
我目前在使用 BufferedReader 获取 unix 管道句柄时遇到问题。我的 java 应用程序首先创建管道,然后通过这个 java 应用程序执行的外部 perl 脚本写入这个管道,最后一个 Java 应用程序线程从这个 unix 管道连续读取。
我正在使用以下代码从 Java 中读取 unix 管道。但是我看到第四条语句阻塞并且永远不会返回。我正在使用 JDK 1.8 -
File f = new File("/tmp/abc_c");
System.out.println(f.exists) ;
if (f.exists())
BufferedReader reader = new BufferedReader(new FileReader("/tmp/abc_c"));
我还看到 sysout 打印为 true。我想知道使用BufferedReader读取Unix管道是否正确?
【问题讨论】:
-
什么时候阻塞?甚至在阅读任何内容之前或以后?
-
在阅读任何内容之前。就在打开的时候。
-
好的,还有,你为什么直接打开阅读器?回想一下,阅读器会尝试将字节流解码为字符。这是您遇到的一个问题(并且您也没有指定要使用的字符编码)
-
这是我正在尝试调试的现有代码。那么这是否意味着我需要将docs.oracle.com/javase/7/docs/api/java/io/… 与二进制编码一起使用,因为文件字符集是二进制的?
-
InputStreamReader可能是一个解决方案,是的;另外,由于您使用 Java 7+,请考虑使用Files.newInputStream()而不是FileInputStream。