Groovy InputStream закрытие чтения висит - PullRequest
1 голос
/ 29 марта 2012

Я пытаюсь сделать программу на 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», но я обнаружил, что возврат внутри замыкания действует больше как продолжение и фактически не выходит иззакрытие.Есть идеи, что я делаю не так?

1 Ответ

1 голос
/ 29 марта 2012

Вместо

reader.eachLine { println(it) } 

Можете ли вы попробовать

println reader.readLine()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...