相关疑难解决方法(0)

是否可以从具有超时的InputStream读取?

具体来说,问题是写一个这样的方法:

int maybeRead(InputStream in, long timeout)
Run Code Online (Sandbox Code Playgroud)

如果数据在'timeout'毫秒内可用,则返回值与in.read()相同,否则为-2.在方法返回之前,任何生成的线程都必须退出.

为了避免参数,这里的主题是java.io.InputStream,由Sun(任何Java版本)记录.请注意,这并不像看起来那么简单.以下是Sun的文档直接支持的一些事实.

  1. in.read()方法可能是不可中断的.

  2. 将InputStream包装在Reader或InterruptibleChannel中没有帮助,因为所有这些类都可以调用InputStream的方法.如果可以使用这些类,则可以编写一个直接在InputStream上执行相同逻辑的解决方案.

  3. in.available()返回0总是可以接受的.

  4. in.close()方法可能会阻塞或不执行任何操作.

  5. 没有通用的方法来杀死另一个线程.

java timeout inputstream

142
推荐指数
7
解决办法
13万
查看次数

在Java 6中使用继承的stdin/stdout/stderr启动进程

如果我通过Java的ProcessBuilder类启动一个进程,我可以完全访问该进程的标准输入,标准输出和标准错误流,如Java InputStreamsOutputStreams.不过,我不能找到一种方法,这些流无缝连接System.in,System.outSystem.err.

可以用来redirectErrorStream()获取InputStream包含子进程的标准输出和标准错误的单个,然后循环遍历并通过我的标准输出 - 但是我找不到这样做的方法并让用户键入进程,如果我使用C system()调用他或她可以.

这在Java SE 7出现时似乎是可能的 - 我只是想知道现在是否有解决方法.如果isatty()子进程的结果通过重定向,则奖励积分.

java io pipe process

28
推荐指数
2
解决办法
1万
查看次数

运行子进程,在Java中正确地提供输入和输出

我使用Runtime exec()方法在Java中创建子进程.但是,由于子进程是一个交互式程序,我需要在需要时为其提供输入.另外,我需要显示子进程的输出.我怎样才能以最简单的方式做到这一点?

我使用StreamGobbler使用process.getInputStream()显示程序输出.但是,我不知道如何识别程序何时等待输入以及何时使用proc.getOutputStream提供输入.我怎样才能做到这一点?

java process runtime.exec

8
推荐指数
1
解决办法
6457
查看次数

同时运行外部程序并通过stdin/stdout与它通信

我希望能够与我的Java代码同时运行外部程序,即我想启动程序,然后将控制权返回给调用方法,同时保持外部程序同时运行.然后,Java代码将继续生成输入并将其发送到外部程序并接收输出.

我不想继续加载外部程序,因为它有很高的开销.完成此任务的最佳方法是什么?谢谢!

java

7
推荐指数
1
解决办法
5158
查看次数

标签 统计

java ×4

process ×2

inputstream ×1

io ×1

pipe ×1

runtime.exec ×1

timeout ×1