If uncompressed, memory map the file, then with a minimum of overhead find the split points. Never read more than a chunk at a time into memory. For stream based, read into byte array, one chunk at a time, making sure the stream is buffered. Both must be single pass.
Provide a new "official" JMC split-utility.