Я пытаюсь сделать программу на Java более "Groovy".Код Java читает InputStream следующим образом:
static int myFunction(InputStream is) throws IOException {
int b=is.read();
if (b==0) return b;
StringBuffer sb=new StringBuffer();
int c;
boolean done = false;
while(!done) {
c=is.read();
sb.append((char)c);
if(c == '\n') {
done=true;
}
}
System.out.println(sb.toString());
if (b == 1) throw new IOException("blah");
return b;
}
Моя версия Groovy выглядит следующим образом:
def myFunction(InputStream is) throws IOException {
int b=is.read()
if (b==0) return b
def reader = new BufferedReader(new InputStreamReader(is))
reader.eachLine { println(it) }
println("DONE")
if (b == 1) throw new IOException("blah")
return b
}
Он печатает содержимое потока, а затем просто зависает, как будто пытаетсяпрочитайте больше.Он никогда не печатает "ГОТОВО" (добавлено для отладки).Затем я попробовал это с использованием is.eachByte и передачей замыкания с явным «if (c == '\ n') return», но я обнаружил, что возврат внутри замыкания действует больше как продолжение и фактически не выходит иззакрытие.Есть идеи, что я делаю не так?