diff options
author | Shawn Pearce <sop@google.com> | 2010-06-21 14:42:23 -0700 |
---|---|---|
committer | Android Code Review <code-review@android.com> | 2010-06-21 14:42:23 -0700 |
commit | d0e1f4089d9e13dc0adbbde65615b918b37da65e (patch) | |
tree | d77b155d3bd6457d9503effaa9127355d105cb6d | |
parent | e510ae9bf66bab77e211e708ebd2fb0666e7ce59 (diff) | |
parent | 646cf6bdbd5da20f9c60a77f6f9a5ce07490e171 (diff) | |
download | gwtorm-d0e1f4089d9e13dc0adbbde65615b918b37da65e.tar.gz |
Merge "protobuf: Support ByteBuffer based decode"
-rw-r--r-- | pom.xml | 2 | ||||
-rw-r--r-- | src/main/java/com/google/gwtorm/protobuf/ProtobufCodec.java | 14 |
2 files changed, 14 insertions, 2 deletions
@@ -334,7 +334,7 @@ limitations under the License. <dependency> <groupId>com.google.protobuf</groupId> <artifactId>protobuf-java</artifactId> - <version>2.2.0</version> + <version>2.3.0</version> <scope>provided</scope> </dependency> </dependencies> diff --git a/src/main/java/com/google/gwtorm/protobuf/ProtobufCodec.java b/src/main/java/com/google/gwtorm/protobuf/ProtobufCodec.java index d13e7b3..ccb2247 100644 --- a/src/main/java/com/google/gwtorm/protobuf/ProtobufCodec.java +++ b/src/main/java/com/google/gwtorm/protobuf/ProtobufCodec.java @@ -18,6 +18,8 @@ import com.google.gwtorm.client.Column; import com.google.protobuf.ByteString; import com.google.protobuf.CodedInputStream; +import java.nio.ByteBuffer; + /** * Encode and decode an arbitrary Java object as a Protobuf message. * <p> @@ -36,11 +38,21 @@ public abstract class ProtobufCodec<T> { return decode(buf.newCodedInput()); } - /** Decode a byte string into an object instance. */ + /** Decode a byte array into an object instance. */ public T decode(byte[] buf) { return decode(CodedInputStream.newInstance(buf)); } /** Decode an object by reading it from the stream. */ protected abstract T decode(CodedInputStream in); + + /** Decode a byte buffer into an object instance. */ + public T decode(ByteBuffer buf) { + if (buf.hasArray()) { + return decode(CodedInputStream.newInstance(buf.array(), buf.position(), + buf.remaining())); + } else { + return decode(ByteString.copyFrom(buf)); + } + } } |