Author: bryanduxbury
Date: Sat Apr 3 20:25:04 2010
New Revision: 930574
URL: http://svn.apache.org/viewvc?rev=930574&view=rev
Log:
java: Enhance TMemoryInputTransport to allow operation on specific range of a
buffer rather than the whole thing. This will allow us to avoid making array
copies in some instances.
Modified:
incubator/thrift/trunk/lib/java/src/org/apache/thrift/TDeserializer.java
incubator/thrift/trunk/lib/java/src/org/apache/thrift/transport/TFramedTransport.java
incubator/thrift/trunk/lib/java/src/org/apache/thrift/transport/TMemoryInputTransport.java
incubator/thrift/trunk/lib/java/test/org/apache/thrift/transport/TestTMemoryInputTransport.java
Modified:
incubator/thrift/trunk/lib/java/src/org/apache/thrift/TDeserializer.java
URL:
http://svn.apache.org/viewvc/incubator/thrift/trunk/lib/java/src/org/apache/thrift/TDeserializer.java?rev=930574&r1=930573&r2=930574&view=diff
==============================================================================
--- incubator/thrift/trunk/lib/java/src/org/apache/thrift/TDeserializer.java
(original)
+++ incubator/thrift/trunk/lib/java/src/org/apache/thrift/TDeserializer.java
Sat Apr 3 20:25:04 2010
@@ -52,7 +52,7 @@ public class TDeserializer {
* @param protocolFactory Factory to create a protocol
*/
public TDeserializer(TProtocolFactory protocolFactory) {
- trans_ = new TMemoryInputTransport(null);
+ trans_ = new TMemoryInputTransport();
protocol_ = protocolFactory.getProtocol(trans_);
}
Modified:
incubator/thrift/trunk/lib/java/src/org/apache/thrift/transport/TFramedTransport.java
URL:
http://svn.apache.org/viewvc/incubator/thrift/trunk/lib/java/src/org/apache/thrift/transport/TFramedTransport.java?rev=930574&r1=930573&r2=930574&view=diff
==============================================================================
---
incubator/thrift/trunk/lib/java/src/org/apache/thrift/transport/TFramedTransport.java
(original)
+++
incubator/thrift/trunk/lib/java/src/org/apache/thrift/transport/TFramedTransport.java
Sat Apr 3 20:25:04 2010
@@ -85,18 +85,22 @@ public class TFramedTransport extends TT
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);
}
Modified:
incubator/thrift/trunk/lib/java/src/org/apache/thrift/transport/TMemoryInputTransport.java
URL:
http://svn.apache.org/viewvc/incubator/thrift/trunk/lib/java/src/org/apache/thrift/transport/TMemoryInputTransport.java?rev=930574&r1=930573&r2=930574&view=diff
==============================================================================
---
incubator/thrift/trunk/lib/java/src/org/apache/thrift/transport/TMemoryInputTransport.java
(original)
+++
incubator/thrift/trunk/lib/java/src/org/apache/thrift/transport/TMemoryInputTransport.java
Sat Apr 3 20:25:04 2010
@@ -1,17 +1,30 @@
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
@@ -51,7 +64,7 @@ public class TMemoryInputTransport exten
}
public int getBytesRemainingInBuffer() {
- return buf_.length - pos_;
+ return endPos_ - pos_;
}
public void consumeBuffer(int len) {
Modified:
incubator/thrift/trunk/lib/java/test/org/apache/thrift/transport/TestTMemoryInputTransport.java
URL:
http://svn.apache.org/viewvc/incubator/thrift/trunk/lib/java/test/org/apache/thrift/transport/TestTMemoryInputTransport.java?rev=930574&r1=930573&r2=930574&view=diff
==============================================================================
---
incubator/thrift/trunk/lib/java/test/org/apache/thrift/transport/TestTMemoryInputTransport.java
(original)
+++
incubator/thrift/trunk/lib/java/test/org/apache/thrift/transport/TestTMemoryInputTransport.java
Sat Apr 3 20:25:04 2010
@@ -42,4 +42,26 @@ public class TestTMemoryInputTransport e
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));
+ }
}