java 获取process返回值的指定部分

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java 获取process返回值的指定部分相关的知识,希望对你有一定的参考价值。

try
pro = Runtime.getRuntime().exec("cat 1.jpg");
catch (IOException ex)
Logger.getLogger(ExecuteThread.class.getName()).log(Level.SEVERE, null, ex);

BufferedInputStream is = new BufferedInputStream(pro.getInputStream());
这样我可以使用is.read(buffer) 获取返回值
但是我需要这个返回值的字节数有限制,比如超过1024byte 就停止process。
要怎么写呢?求帮助

参考技术A 请参考java API
public BufferedInputStream(InputStream in,
int size)创建具有指定缓冲区大小的 BufferedInputStream 并保存其参数,即输入流 in,以便将来使用。创建一个长度为 size 的内部缓冲区数组并将其存储在 buf 中。

参数:
in - 底层输入流。
size - 缓冲区大小。
抛出:
IllegalArgumentException - 如果 size <= 0
参考技术B byte[] bs = new byte[1025];
while((count = dis.read(bs))<1025)
String str=new String(bs,0,count);

超过1024才会读,具体怎么返回,自己可以加个标识flag追问

String类型是不是有大小限制啊,还是new byte有尺寸限制啊~~~我实际要截取的size差不多1.5M。
new String这行会报java.lang.StringIndexOutOfBoundsException: String index out of range: -1

追答

byte[] bs = new byte[1024];
while((count = dis.read(bs))>0)
String str=new String(bs,0,count);

这种每次读1024个字节的,看错应该是越界了,但是String 很大阿,你代码是不是写的有问题阿

本回答被提问者采纳
参考技术C 是多线程的吧,process是一个线程

如何使用线程去执行一个 有返回值的方法,并获取返回值?

这个问题有点奇怪。。。一般情况需要用线程的话都是异步的,如果是需要等待返回值做处理的情况大部分都是同步的不需要用到多线程(除非是响应式,即线程执行完了,然后促发某个方法来处理某个结果),这种情况的话最好是单独设置一个静态变量来记录这个值,不是用返回值这种概念来做的。。。。。
这个情况用线程做需要处理很多东西,要监听线程的执行情况,或者注册一个事件,线程执行完了促发这个事件,再用事件响应函数来处理结果,不知道你是不是确定这种需求。
如果是winform程序的话就很简单了,直接用backgroundworkder(托管式的后台线程,由系统自动分配线程池中的线程进行异步处理,可以看做多线程的一种解决方案)这个控件就好了。。。直接有异步执行方法和结果事件监听。。。来自:求助得到的回答
参考技术A 可以让线程实现Callable接口,实现call方法,可以把你需要的东西return回去,然后如果是线程池的话可以用Future对象的get()方法来接收这个返回值。但是这样做线程池也只会同步执行一个线程。 参考技术B 为什么不能得到返回值呢?

以上是关于java 获取process返回值的指定部分的主要内容,如果未能解决你的问题,请参考以下文章

如何使用线程去执行一个 有返回值的方法,并获取返回值?

Python开发实用技巧:获取部分返回值的4种方式

Java中使用有返回值的线程

一个方法可以有多少个参数多少个返回值 Java

一个方法可以有多少个参数多少个返回值 Java

从函数中获取返回值的麻烦