Heh no, this was the actual bug (that it was reading "random" data from memory on the first iteration). I just hadn't noticed the issue until this "random memory" contained fragments of invalid json.
From what I remember, directly allocated ByteBuffers are not guaranteed to be zeroed.