为什么从Process'InputStream读取块数据是可用的【JAVA教程】

!
也想出现在这里? 联系我们
信息

为什么从Process'InputStream读取块数据是可用的,第1张

概述为什么从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读取块数据是可用的所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

© 版权声明
THE END
喜欢就支持一下吧
点赞92 分享
评论 抢沙发

请登录后发表评论

    请登录后查看评论内容