Подтвердить что ты не робот

Как перебрать все байты в inputStream с помощью Groovy, учитывая, что ему не хватает инструкции do-while?

Учитывая, что Groovy не имеет инструкции do-while, как я могу перебирать все байты во входном потоке?

На предыдущая версия руководства пользователя Groovy:

Синтаксис

Нет 'еще... while()'.

Из-за двусмысленности мы еще не добавили поддержку do.. пока Groovy

Каким будет лучший способ сделать что-то вроде следующего кода Java в Groovy?

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

} while(numRead > 0);

(Я знаю, что могу сделать это с помощью логического, я просто хочу знать, есть ли способ "Groovy" )

4b9b3361

Ответ 1

groovy (версия 1.8+) будет выглядеть так:

inputStream.eachByte(BUFFER_SIZE) { buffer, numRead ->
    ...
}

Ответ 2

Я знаю, что старый и уже ответил на вопрос. Но это первое, что всплывает для 'groovy do while', когда googled.

Я думаю, что общий значительный do-while синоним в Groovy может быть:

while ({
    ...

    numRead > 0
}()) continue

Пожалуйста, рассмотрите приведенный выше пример. За исключением некоторых "избыточных" скобок это довольно читаемый синтаксис.

И вот как это работает:

  • внутри круга while круглые скобки заключаются в закрытие с открытой фигурной скобкой
  • закрытие запускается в линию с помощью пары внутренних круглых скобок после закрытия фигурного скобки
  • значение последней строки внутри замыкания - это значение, которое приведет к поломке цикла, когда false (он возвращается из замыкания)
  • continue после того, как условие закрытия круглой скобки будет только потому, что должно быть что-то, любое компилируемое утверждение. Например, это может быть 0, хотя continue кажется намного лучше.

EDIT: Не уверен, что это более новая версия Groovy, или я пропустил это раньше. Вместо этого будет выполняться точка с запятой continue. Затем он выглядит следующим образом:

while ({
    ...

    numRead > 0
}());

Ответ 3

используйте это:

for(;;){ // infinite for
    ...

    if( numRead == 0 ){ //condition to break, oppossite to while 
        break
    }
}