in wagon-providers/wagon-http-shared/src/main/java/org/apache/maven/wagon/shared/http/AbstractHttpClientWagon.java [174:217]
public void writeTo(final OutputStream output) throws IOException {
if (output == null) {
throw new NullPointerException("output cannot be null");
}
TransferEvent transferEvent =
new TransferEvent(wagon, resource, TransferEvent.TRANSFER_PROGRESS, TransferEvent.REQUEST_PUT);
transferEvent.setTimestamp(System.currentTimeMillis());
try (ReadableByteChannel input = (this.source != null)
? new RandomAccessFile(this.source, "r").getChannel()
: Channels.newChannel(stream)) {
ByteBuffer buffer = ByteBuffer.allocate(getBufferCapacityForTransfer(this.length));
int halfBufferCapacity = buffer.capacity() / 2;
long remaining = this.length < 0L ? Long.MAX_VALUE : this.length;
while (remaining > 0L) {
int read = input.read(buffer);
if (read == -1) {
// EOF, but some data has not been written yet.
if (((Buffer) buffer).position() != 0) {
((Buffer) buffer).flip();
fireTransferProgress(transferEvent, buffer.array(), ((Buffer) buffer).limit());
output.write(buffer.array(), 0, ((Buffer) buffer).limit());
((Buffer) buffer).clear();
}
break;
}
// Prevent minichunking/fragmentation: when less than half the buffer is utilized,
// read some more bytes before writing and firing progress.
if (((Buffer) buffer).position() < halfBufferCapacity) {
continue;
}
((Buffer) buffer).flip();
fireTransferProgress(transferEvent, buffer.array(), ((Buffer) buffer).limit());
output.write(buffer.array(), 0, ((Buffer) buffer).limit());
remaining -= ((Buffer) buffer).limit();
((Buffer) buffer).clear();
}
output.flush();
}
}