Resolved issue: NETTY-254 Do not do lazy-initialization in dynamic buffer
* No lazy initialization anymore for DynamicChannelBuffer - it just causes confusion to users!
This commit is contained in:
parent
6795fc0627
commit
9e44dbada5
@ -38,9 +38,8 @@ import java.nio.channels.ScatteringByteChannel;
|
|||||||
public class DynamicChannelBuffer extends AbstractChannelBuffer {
|
public class DynamicChannelBuffer extends AbstractChannelBuffer {
|
||||||
|
|
||||||
private final ChannelBufferFactory factory;
|
private final ChannelBufferFactory factory;
|
||||||
private final int initialCapacity;
|
|
||||||
private final ByteOrder endianness;
|
private final ByteOrder endianness;
|
||||||
private ChannelBuffer buffer = ChannelBuffers.EMPTY_BUFFER;
|
private ChannelBuffer buffer;
|
||||||
|
|
||||||
public DynamicChannelBuffer(int estimatedLength) {
|
public DynamicChannelBuffer(int estimatedLength) {
|
||||||
this(ByteOrder.BIG_ENDIAN, estimatedLength);
|
this(ByteOrder.BIG_ENDIAN, estimatedLength);
|
||||||
@ -61,8 +60,8 @@ public class DynamicChannelBuffer extends AbstractChannelBuffer {
|
|||||||
throw new NullPointerException("factory");
|
throw new NullPointerException("factory");
|
||||||
}
|
}
|
||||||
this.factory = factory;
|
this.factory = factory;
|
||||||
initialCapacity = estimatedLength;
|
|
||||||
this.endianness = endianness;
|
this.endianness = endianness;
|
||||||
|
buffer = factory.getBuffer(order(), estimatedLength);
|
||||||
}
|
}
|
||||||
|
|
||||||
public ChannelBufferFactory factory() {
|
public ChannelBufferFactory factory() {
|
||||||
@ -268,10 +267,7 @@ public class DynamicChannelBuffer extends AbstractChannelBuffer {
|
|||||||
|
|
||||||
int newCapacity;
|
int newCapacity;
|
||||||
if (capacity() == 0) {
|
if (capacity() == 0) {
|
||||||
newCapacity = initialCapacity;
|
newCapacity = 1;
|
||||||
if (newCapacity == 0) {
|
|
||||||
newCapacity = 1;
|
|
||||||
}
|
|
||||||
} else {
|
} else {
|
||||||
newCapacity = capacity();
|
newCapacity = capacity();
|
||||||
}
|
}
|
||||||
|
@ -17,6 +17,8 @@ package org.jboss.netty.buffer;
|
|||||||
|
|
||||||
import static org.junit.Assert.*;
|
import static org.junit.Assert.*;
|
||||||
|
|
||||||
|
import java.nio.ByteOrder;
|
||||||
|
|
||||||
import org.junit.Test;
|
import org.junit.Test;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -34,14 +36,7 @@ public class DynamicChannelBufferTest extends AbstractChannelBufferTest {
|
|||||||
protected ChannelBuffer newBuffer(int length) {
|
protected ChannelBuffer newBuffer(int length) {
|
||||||
buffer = ChannelBuffers.dynamicBuffer(length);
|
buffer = ChannelBuffers.dynamicBuffer(length);
|
||||||
|
|
||||||
// A dynamic buffer does lazy initialization.
|
assertEquals(0, buffer.readerIndex());
|
||||||
assertEquals(0, buffer.capacity());
|
|
||||||
|
|
||||||
// Initialize.
|
|
||||||
buffer.writeZero(1);
|
|
||||||
buffer.clear();
|
|
||||||
|
|
||||||
// And validate the initial capacity
|
|
||||||
assertEquals(0, buffer.writerIndex());
|
assertEquals(0, buffer.writerIndex());
|
||||||
assertEquals(length, buffer.capacity());
|
assertEquals(length, buffer.capacity());
|
||||||
|
|
||||||
@ -57,4 +52,21 @@ public class DynamicChannelBufferTest extends AbstractChannelBufferTest {
|
|||||||
public void shouldNotAllowNullInConstructor() {
|
public void shouldNotAllowNullInConstructor() {
|
||||||
new DynamicChannelBuffer(null, 0);
|
new DynamicChannelBuffer(null, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void shouldNotFailOnInitialIndexUpdate() {
|
||||||
|
new DynamicChannelBuffer(ByteOrder.BIG_ENDIAN, 10).setIndex(0, 10);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void shouldNotFailOnInitialIndexUpdate2() {
|
||||||
|
new DynamicChannelBuffer(ByteOrder.BIG_ENDIAN, 10).writerIndex(10);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void shouldNotFailOnInitialIndexUpdate3() {
|
||||||
|
ChannelBuffer buf = new DynamicChannelBuffer(ByteOrder.BIG_ENDIAN, 10);
|
||||||
|
buf.writerIndex(10);
|
||||||
|
buf.readerIndex(10);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user