Этот раздел доставляет мне беспокойство:
1000.times{
def fos = new FileOutputStream(pipe)
fos.write(bytes)
fos.flush()
fos.close()
}
Я знаю, что базовый системный вызов Unix write () не всегда записывает запрошенное количество байтов .Вы должны проверить возвращаемое значение, чтобы увидеть, какое число действительно было написано.
Я проверил документы для Java, и оказалось, что fos.write () не имеет возвращаемого значения, он просто выдает IOException, если что-то пойдет не так.Что Groovy делает с исключениями?Есть ли какие-то исключения?
Если вы можете, запустите это в режиме strace и просмотрите результаты системных вызовов read и write.Вполне возможно, что Java VM не работает правильно с системным вызовом write ().Я знаю, что это может произойти, потому что я поймал реализацию fwrite в glibc, которая делала это (игнорируя возвращаемое значение) два года назад.