summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorShawn Pearce <sop@google.com>2010-06-21 14:42:23 -0700
committerAndroid Code Review <code-review@android.com>2010-06-21 14:42:23 -0700
commitd0e1f4089d9e13dc0adbbde65615b918b37da65e (patch)
treed77b155d3bd6457d9503effaa9127355d105cb6d
parente510ae9bf66bab77e211e708ebd2fb0666e7ce59 (diff)
parent646cf6bdbd5da20f9c60a77f6f9a5ce07490e171 (diff)
downloadgwtorm-d0e1f4089d9e13dc0adbbde65615b918b37da65e.tar.gz
Merge "protobuf: Support ByteBuffer based decode"
-rw-r--r--pom.xml2
-rw-r--r--src/main/java/com/google/gwtorm/protobuf/ProtobufCodec.java14
2 files changed, 14 insertions, 2 deletions
diff --git a/pom.xml b/pom.xml
index 9fbb95f..a5f703f 100644
--- a/pom.xml
+++ b/pom.xml
@@ -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));
+ }
+ }
}