我如何使用Groovy迭代inputStream中的所有字节,因为它缺少do-while语句?

tal*_*las 15 groovy loops do-while

鉴于Groovy没有do-while语句,我如何迭代输入流中的所有字节?

根据以前版本的Groovy用户指南:

目前还没有'do ... while()'语法.

由于含糊不清,我们还没有增加对Groovy的支持

在Groovy中执行以下Java代码的最佳方法是什么?

def numRead = inputStream.read(fileBytes, 0, fileBytes.length);
do{

} while(numRead > 0);
Run Code Online (Sandbox Code Playgroud)

(我知道我可以使用布尔值来做到这一点,我只想知道是否有"Groovy"方式)

top*_*opr 17

我知道这是一个陈旧且已经回答的问题.但这是第一次用谷歌搜索"groovy do while"的第一个.

我觉得一般相当DO-而在Groovy同义词可以是:

while ({
    ...

    numRead > 0
}()) continue
Run Code Online (Sandbox Code Playgroud)

请考虑上面的例子.除了一些"冗余"括号外,它的语法相当好.

以下是它的工作原理:

  1. while条件圆形括号内部的一个闭合被定义为花括号打开
  2. 在大括号括起来之后,闭包与内圆括号对内联执行
  3. 闭包内最后一行的值是false时将断开循环的值(它从闭包中返回)
  4. continue条件关闭圆括号之后只是因为必须有'某事',任何可编辑的声明.例如它可能是0,但continue似乎更适合.

编辑:不确定它是Groovy的新版本还是我以前错过了.而continue分号也可以.然后就像:

while ({
    ...

    numRead > 0
}());
Run Code Online (Sandbox Code Playgroud)


ata*_*lor 13

groovy(版本1.8+)的方式是这样的:

inputStream.eachByte(BUFFER_SIZE) { buffer, numRead ->
    ...
}
Run Code Online (Sandbox Code Playgroud)