this seems simple enough, an alternative might be to use Guava's ByteStreams.join() and work with InputSupplier<InputStream>s.

i guess i'm not certain when you end up reading from multiple InputStreams in the client code? hmm, my best guess is that you are trying to test what happens when you can't fully read all that you asked for from the underlying InputStream. Instead, could you mock it? hmm i guess its a bit of a pita since you'd have to do stubbing with callbacks in order to mutate the array passed in. ok, how about this, just add a comment to the test case explaining why you have this class and what that test REALLY tests.