NIO vs IO, your currently use old style blocking IO.
I'd have a look at some of the excellent comms libs , Grizzly / MINA / Netty etc and use one of them, you may find one of them has a ready made solution for this.
There's no reason why your next read can't be occurring while your last read is being processed in parallel, how much that will help with performance I can't comment. Your probably better posting in one of the IO libs forums as well.
"Eagles may soar but weasels don't get sucked into jet engines" SCJP 1.6, SCWCD 1.4, SCJD 1.5,SCBCD 5