Skip to content

Commit 7055cfc

Browse files
authored
chore: improve efficiency of computing total number of bytes in Buffer#totalRemaining (#2508)
Benchmark (bufferCount) Mode Cnt Score Error Units BuffersBenchmark.forEachLoop 1 avgt 4 7.914 ± 0.301 ns/op BuffersBenchmark.forEachLoop 2 avgt 4 9.055 ± 0.052 ns/op BuffersBenchmark.forEachLoop 4 avgt 4 12.900 ± 0.032 ns/op BuffersBenchmark.forEachLoop 8 avgt 4 16.079 ± 0.022 ns/op BuffersBenchmark.forEachLoop 16 avgt 4 18.960 ± 0.071 ns/op BuffersBenchmark.streamBufferRemaning 1 avgt 4 30.282 ± 0.439 ns/op BuffersBenchmark.streamBufferRemaning 2 avgt 4 31.856 ± 0.106 ns/op BuffersBenchmark.streamBufferRemaning 4 avgt 4 34.241 ± 1.398 ns/op BuffersBenchmark.streamBufferRemaning 8 avgt 4 37.503 ± 1.711 ns/op BuffersBenchmark.streamBufferRemaning 16 avgt 4 43.705 ± 0.963 ns/op
1 parent 55193d0 commit 7055cfc

File tree

1 file changed

+6
-3
lines changed
  • google-cloud-storage/src/main/java/com/google/cloud/storage

1 file changed

+6
-3
lines changed

google-cloud-storage/src/main/java/com/google/cloud/storage/Buffers.java

+6-3
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,6 @@
2020
import java.nio.Buffer;
2121
import java.nio.ByteBuffer;
2222
import java.nio.channels.ReadableByteChannel;
23-
import java.util.Arrays;
2423
import java.util.function.Consumer;
2524

2625
/**
@@ -162,7 +161,11 @@ static int fillFrom(ByteBuffer buf, ReadableByteChannel c) throws IOException {
162161
}
163162

164163
static long totalRemaining(ByteBuffer[] buffers, int offset, int length) {
165-
ByteBuffer[] sub = Arrays.copyOfRange(buffers, offset, length);
166-
return Arrays.stream(sub).mapToLong(Buffer::remaining).sum();
164+
long totalRemaning = 0;
165+
for (int i = offset; i < length; i++) {
166+
ByteBuffer buffer = buffers[i];
167+
totalRemaning += buffer.remaining();
168+
}
169+
return totalRemaning;
167170
}
168171
}

0 commit comments

Comments
 (0)