2013-06-03 3 views
0

Мне нужно прочитать байт [], созданный другой программой Java, которую я написал. Как известно, main в java может только вернуть пустоту. Означает ли это, что мне нужно написать программу со статическим методом с типом возвращаемого типа []? Если да, как я могу запустить этот метод в своей программе и сохранить его возвращаемое значение в моей программе? это то, что у меня есть в моей программе: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 открыть файл .dcm и преобразовать его в байт [] в Android SDK. единственный способ открыть его - плагин для ImageIO, а Android SDK никак не поддерживает его, даже если я добавлю все .jars правильно, он не будет компилироваться. поэтому мне удалось преобразовать его в байт [] в другую внешнюю программу, и теперь я хочу получить этот байт [] – IAM

ответ

5

Нет, вы не можете передавать возвращаемые значения в экземплярах JVM. Вы должны разработать и реализовать конкретный протокол, который будет передавать данные. Один простой вариант, который у вас есть, заключается в написании System.out в подпроцессе, который будет выталкивать данные в ваш is, поэтому ваш bytes будет содержать то, что написал подпроцесс.

+0

, вы думаете, что это будет работать, чтобы просто передать консольный вывод из одной программы на консольный ввод другой программы ? –

+0

@MarcoForberg Вы имеете в виду, не использовать 'Runtime # exec' вообще? Это может зависеть от платформы OP, но если в Linux я думаю, что это сработает. Только это очень необычный подход для Java, вероятно, из-за многоплатформенных проблем с этим. –

+0

@MarkoTopolnik спасибо. поэтому в моей внешней программе я могу вывести байты в форме строки с System.out.println(), а затем захватить ее в «основной» программе и преобразовать ее в байт []? – IAM