A valid comment regarding avoiding loading the whole block seems to have been removed. I thought that was an intentional design decision, but since we batch based on number of objects rather than their byte size, it is true that it's possible for this to be large.

One perhaps simple solution is to use [ByteStreams.limit()](http://docs.guava-libraries.googlecode.com/git-history/f0b02a417c9f144bcc37214e1677c06acb92a704/javadoc/com/google/common/io/ByteStreams.html#limit(java.io.InputStream, long)) from Guava, which should ensure that no buffering occurs past the end of the desired region.