概述为什么从Process'InputStream读取块数据是可用的
Java的:
Process p = Runtime.getRuntime().exec(\”myCommand\”); final inputStream in = p.getinputStream(); new Thread() { public voID run() { int b; while ((b = in.read()) != -1) // Blocks here until process terminates,why? System.out.print((char) b); } }.start();
CPP:
#include <stdio.h> #include <unistd.h> int main(int argc,char** argv) { printf(\”round 1n\”); // At this point I\’d expect the Java process be able // to read from the input stream. sleep(1); printf(\”round 2n\”); sleep(1); printf(\”round 3n\”); sleep(1); printf(\”finished!n\”); return 0; // Only Now inputStream.read() stops blocking and starts reading. }
inputStream.read()的文档声明:
此方法阻塞,直到input数据可用,stream的末尾被检测到,或抛出exception。
Intellij和sbt 0.13.5“URI有一个权限组件”
将Jenkinsconfiguration为windows服务:JENKINS_HOME,Path和文件结构
超时后,从Javalockingwindows桌面
如何杀死从Java内部产生的ant程序
Java,不能删除windows上的文件
是的,我知道这一点(从而与linux相关?):
java.lang.Process:由于某些本地平台仅为标准input和输出stream提供有限的缓冲区大小,因此如果不及时写入inputstream或读取子stream程的输出stream,可能会导致子stream程阻塞甚至死锁。
我的问题是:
为什么是inputStream.read()阻塞,虽然我应该已经有数据可用的权利后,进程启动? 我在任何一方丢失了什么?
如果是与linux相关的,有没有办法从进程的输出stream中读取而不阻塞?
JavaFX媒体播放器不工作
在两台连接的计算机之间发送数据包的最快方法?
在windows上全局设置“JAVA_OPTS”
当java进程终止时捕获
在windows下的Java中,如何findredirect的桌面文件夹?
为什么从Process\’inputStream块读取尽管数据可用
它不。 这里的问题是,当你认为数据是不可用的,这是由发件人的缓冲引起的。
你可以根据@MarkkuK。的评论用fflush()来解决这个问题,或者告诉stdio不要缓存stdout ,就像你一样。
还有一个我在这里发布的解决方案,其中包括在从Process流中读取任何内容之前使用inputStream#available() 。
总结
以上是内存溢出为你收集整理的为什么从Process'InputStream读取块数据是可用的全部内容,希望文章能够帮你解决为什么从Process'InputStream读取块数据是可用的所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
请登录后查看评论内容