mirror of
https://github.com/vee1e/flatbuffers.git
synced 2026-09-03 02:37:31 +00:00
[Java] Grow ArrayReadWriteBuf enough to match requested capacity. (#5921)
* [Java] Grow ArrayReadWriteBuf enough to match requested capacity. Also handle requested capacity overflowing. * [Java] Improve readability of ArrayReadWriteBuf.requestCapacity() * [Java] prepare testBuilderGrowth() to fail again once FlexBuffersBuilder uses ByteBufferReadWriteBuf internally, add TestFail() as a better alternative to a plain "assert false" * [Java] Revert some test changes and extract a small string that was used more than once; one could say three times, however, it might be worthy of a discussion if the third occasion also falls into this category, as it is an independent use case and thus would work in the same way even if the value changed. Co-authored-by: Markus <markus@greenrobot>
This commit is contained in:
parent
666800da36
commit
2eaf57778c
2 changed files with 12 additions and 4 deletions
|
|
@ -234,12 +234,18 @@ public class ArrayReadWriteBuf implements ReadWriteBuf {
|
|||
|
||||
@Override
|
||||
public boolean requestCapacity(int capacity) {
|
||||
if (buffer.length > capacity) {
|
||||
if (capacity < 0) {
|
||||
throw new IllegalArgumentException("Capacity may not be negative (likely a previous int overflow)");
|
||||
}
|
||||
if (buffer.length >= capacity) {
|
||||
return true;
|
||||
}
|
||||
// implemented in the same growing fashion as ArrayList
|
||||
int oldCapacity = buffer.length;
|
||||
int newCapacity = oldCapacity + (oldCapacity >> 1);
|
||||
if (newCapacity < capacity) { // Note: this also catches newCapacity int overflow
|
||||
newCapacity = capacity;
|
||||
}
|
||||
buffer = Arrays.copyOf(buffer, newCapacity);
|
||||
return true;
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue