2013-06-03 87 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

相關問題