protected long write(RandomAccessReader reader, ChecksumValidator validator, int start, long length, long bytesTransferred) throws IOException
    {
        int toTransfer = (int) Math.min(transferBuffer.length, length - bytesTransferred);
        int minReadable = (int) Math.min(transferBuffer.length, reader.length() - reader.getFilePointer());

        reader.readFully(transferBuffer, 0, minReadable);
        if (validator != null)
            validator.validate(transferBuffer, 0, minReadable);

        limiter.acquire(toTransfer - start);
        compressedOutput.write(transferBuffer, start, (toTransfer - start));

        return toTransfer;
    }
protected long write ( RandomAccessReader reader , ChecksumValidator validator , int start , long length , long bytesTransferred ) throws IOException { int toTransfer = ( int ) Math . min ( transferBuffer . length , length - bytesTransferred ) ; int minReadable = ( int ) Math . min ( transferBuffer . length , reader . length ( ) - reader . getFilePointer ( ) ) ; reader . readFully ( transferBuffer , 0 , minReadable ) ; if ( validator != null ) validator . validate ( transferBuffer , 0 , minReadable ) ; limiter . acquire ( toTransfer - start ) ; compressedOutput . write ( transferBuffer , start , ( toTransfer - start ) ) ; return toTransfer ; }
Sequentially read bytes from the file and write them to the output stream

@param reader The file reader to read from
@param validator validator to verify data integrity
@param start number of bytes to skip transfer, but include for validation.
@param length The full length that should be read from {@code reader}
@param bytesTransferred Number of bytes already read out of {@code length}

@return Number of bytes read

@throws java.io.IOException on any I/O error