return readBuffer_.read(buf, off, len);
}
+ @Override
public byte[] getBuffer() {
return readBuffer_.getBuffer();
}
+ @Override
public int getBufferPosition() {
return readBuffer_.getBufferPosition();
}
+ @Override
public int getBytesRemainingInBuffer() {
return readBuffer_.getBytesRemainingInBuffer();
}
+ @Override
public void consumeBuffer(int len) {
readBuffer_.consumeBuffer(len);
}
package org.apache.thrift.transport;
-public class TMemoryInputTransport extends TTransport {
+public final class TMemoryInputTransport extends TTransport {
private byte[] buf_;
private int pos_;
+ private int endPos_;
+
+ public TMemoryInputTransport() {
+ }
public TMemoryInputTransport(byte[] buf) {
reset(buf);
}
+ public TMemoryInputTransport(byte[] buf, int offset, int length) {
+ reset(buf, offset, length);
+ }
+
public void reset(byte[] buf) {
+ reset(buf, 0, buf.length);
+ }
+
+ public void reset(byte[] buf, int offset, int length) {
buf_ = buf;
- pos_ = 0;
+ pos_ = offset;
+ endPos_ = offset + length;
}
@Override
}
public int getBytesRemainingInBuffer() {
- return buf_.length - pos_;
+ return endPos_ - pos_;
}
public void consumeBuffer(int len) {
assertEquals(new_buf, trans.getBuffer());
assertEquals(3, trans.getBytesRemainingInBuffer());
}
+
+ public void testWithOffsetAndLength() throws Exception {
+ byte[] input_buf = new byte[]{1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
+ TMemoryInputTransport trans = new TMemoryInputTransport(input_buf, 1, 3);
+ assertEquals(1, trans.getBufferPosition());
+ assertEquals(3, trans.getBytesRemainingInBuffer());
+ byte[] readBuffer = new byte[3];
+ trans.readAll(readBuffer, 0, 3);
+ assertTrue(Arrays.equals(new byte[]{2, 3, 4}, readBuffer));
+
+ try {
+ assertEquals(0, trans.readAll(readBuffer, 0, 3));
+ fail("should have thrown an exception");
+ } catch (Exception e) {
+ // yay
+ }
+
+ trans.reset(input_buf, 3, 4);
+ readBuffer = new byte[4];
+ trans.readAll(readBuffer, 0, 4);
+ assertTrue(Arrays.equals(new byte[]{4, 5, 6, 7}, readBuffer));
+ }
}