2013-06-03 31 views
0

我需要读取另一个我编写的java程序生成的一个byte []。众所周知,java中的main只能返回一个void。这是否意味着我需要用返回类型为byte []的静态方法编写程序? 如果是的话,我怎么才能在我的程序中运行这个方法,并保存它在我的程序中的返回值?这是我在我的程序中有:Java:在我的程序中使用其他程序的静态方法输出

ProcessBuilder pb = new ProcessBuilder("java.exe","viewer.java","pathToViewer.java"); 
Process process = pb.start(); 
InputStream is = process.getInputStream(); 
byte[] bytes = IOUtils.toByteArray(is); 

什么是正确的方法?

+0

你试图解决什么更高级别的问题? – Simon

+0

为什么你不能在你的程序中调用另一个程序?为什么你需要使用ProcessBuilder? – vineet

+0

@Simon在Android SDK中打开一个.dcm文件并将其转换为byte []。打开它的唯一方法是ImageIO的插件,Android SDK不以任何方式支持它,即使我正确添加所有的.jar,它也不会编译。所以我设法将它转换为另一个外部程序中的byte [],现在我想要得到这个byte [] – IAM

回答

5

不,您不能在各个JVM实例之间传递返回值。你必须设计和实现一个能传递数据的特定协议。一个简单的选项是在子进程中写入System.out,这会将数据推送到您的is,因此您的bytes将最终包含子进程写入的内容。

+0

您认为它可以将控制台输出从一个程序输入到另一个程序的控制台输入? –

+0

@MarcoForberg你的意思是,不要使用'Runtime#exec'呢?这可能取决于OP的平台,但如果在Linux上,我认为它会起作用。只是,这对于Java来说是非常不寻常的方法,可能是由于多平台问题。 –

+0

@MarkoTopolnik谢谢你。所以在我的外部程序中,我可以使用System.out.println()以字符串的形式输出字节,然后通过is在“main”程序中将其捕获并将其转换为byte []? – IAM

相关问题