Can you simply add `boolean hasNext() {return num_bytes_read != -1;}` ? This way I can fuzzy benchmark it - else your code throws exceptions in the end.