Ответ 1
groovy (версия 1.8+) будет выглядеть так:
inputStream.eachByte(BUFFER_SIZE) { buffer, numRead ->
...
}
Учитывая, что Groovy не имеет инструкции do-while, как я могу перебирать все байты во входном потоке?
На предыдущая версия руководства пользователя Groovy:
СинтаксисНет 'еще... while()'.
Из-за двусмысленности мы еще не добавили поддержку do.. пока Groovy
Каким будет лучший способ сделать что-то вроде следующего кода Java в Groovy?
def numRead = inputStream.read(fileBytes, 0, fileBytes.length);
do{
} while(numRead > 0);
(Я знаю, что могу сделать это с помощью логического, я просто хочу знать, есть ли способ "Groovy" )
groovy (версия 1.8+) будет выглядеть так:
inputStream.eachByte(BUFFER_SIZE) { buffer, numRead ->
...
}
Я знаю, что старый и уже ответил на вопрос. Но это первое, что всплывает для 'groovy do while', когда googled.
Я думаю, что общий значительный do-while синоним в Groovy может быть:
while ({
...
numRead > 0
}()) continue
Пожалуйста, рассмотрите приведенный выше пример. За исключением некоторых "избыточных" скобок это довольно читаемый синтаксис.
И вот как это работает:
while
круглые скобки заключаются в закрытие с открытой фигурной скобкойcontinue
после того, как условие закрытия круглой скобки будет только потому, что должно быть что-то, любое компилируемое утверждение. Например, это может быть 0
, хотя continue
кажется намного лучше.EDIT: Не уверен, что это более новая версия Groovy, или я пропустил это раньше.
Вместо этого будет выполняться точка с запятой continue
. Затем он выглядит следующим образом:
while ({
...
numRead > 0
}());
используйте это:
for(;;){ // infinite for
...
if( numRead == 0 ){ //condition to break, oppossite to while
break
}
}