Вам нужно что-то построить для разбора входного потока.Предполагая, что это буквально так сложно, как вы указали, первое, что вам нужно сделать, это вывести строку из InputStream
, вы можете сделать это так:
// InputStream in = ...;
// read and accrue characters until the linebreak
StringBuilder sb = new StringBuilder();
int c;
while((c = in.read()) != -1 && c != '\n'){
sb.append(c);
}
String line = sb.toString();
Или вы можете использовать BufferedReader
(как указано в комментариях):
BufferedReader rdr = new BufferedReader(new InputStreamReader(in));
String line = rdr.readLine();
Когда у вас есть строка для обработки, вам нужно разбить ее на куски, а затем обработать кусочки в нужный массив:
// now process the whole input
String[] parts = line.split("\\s");
// only if the direction is to read the input
if("read".equals(parts[0])){
// create an array to hold the ints
// note that we dynamically size the array based on the
// the length of `parts`, which contains an array of the form
// ["read", "1", "2", "3", ...], so it has size 1 more than required
// to hold the integers, thus, we create a new array of
// same size as `parts`, less 1.
int[] inputInts = new int[parts.length-1];
// iterate through the string pieces we have
for(int i = 1; i < parts.length; i++){
// and convert them to integers.
inputInts[i-1] = Integer.parseInt(parts[i]);
}
}
Я уверен, что некоторые из этих методов могут генерировать исключения (по крайней мере, read
и parseInt
do), я оставлю обработку их как упражнение.