1
私はJavaプログラムをもっと "Groovy"にしようとしています。 JavaコードはそうのようなInputStreamを読み取りますGroovy InputStream読み込みクロージャが掛かる
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
}
それは、ストリームの内容を出力し、多くを読むためにしようとしているかのようにちょうどハング:
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のバージョンは、次のようになります。それは決して "DONE"(デバッグのために追加された)を出力しません。次に、is.eachByteを使用して明示的に "if(c == '\ n')return"というクロージャーを渡してみましたが、クロージャー内でのリターンがより継続的に機能し、実際には閉鎖。私が間違っていることは何か考えていますか?
感謝を試すことができます。それはうまくいった。クロージャが私のコードに戻らない理由は何ですか? – JeffMc
'eachLine'は、各行を順番に読むループを永遠に繰り返すので、閉鎖を解除する方法はありません。 –
これ以上の行はありませんか?それのポイントは何ですか?無限ループを望む場合にのみ使用しますか? – JeffMc