diff options
author | Daniel Martin <daniel.martin@crowdstrike.com> | 2014-11-25 12:58:34 -0500 |
---|---|---|
committer | Daniel Martin <daniel.martin@crowdstrike.com> | 2014-11-25 13:00:03 -0500 |
commit | 5ff8dc8e005f5312af98655786c1c8438a617efb (patch) | |
tree | 4af7d4dfc83d1725c124cb45eb07b35bd39df584 /java/src/main | |
parent | 99aa0f9e8f1a88def7bdebf1385678559cda0707 (diff) | |
download | protobuf-5ff8dc8e005f5312af98655786c1c8438a617efb.tar.gz protobuf-5ff8dc8e005f5312af98655786c1c8438a617efb.tar.bz2 protobuf-5ff8dc8e005f5312af98655786c1c8438a617efb.zip |
Make ByteStrings serializable with java serialization.
Diffstat (limited to 'java/src/main')
4 files changed, 37 insertions, 1 deletions
diff --git a/java/src/main/java/com/google/protobuf/BoundedByteString.java b/java/src/main/java/com/google/protobuf/BoundedByteString.java index 2828e9c7..8cb6f463 100644 --- a/java/src/main/java/com/google/protobuf/BoundedByteString.java +++ b/java/src/main/java/com/google/protobuf/BoundedByteString.java @@ -30,6 +30,9 @@ package com.google.protobuf; +import java.io.InvalidObjectException; +import java.io.IOException; +import java.io.ObjectInputStream; import java.util.NoSuchElementException; /** @@ -123,6 +126,20 @@ class BoundedByteString extends LiteralByteString { } // ================================================================= + // Serializable + + private static final long serialVersionUID = 1L; + + Object writeReplace() { + return new LiteralByteString(toByteArray()); + } + + private void readObject(ObjectInputStream in) throws IOException { + throw new InvalidObjectException( + "BoundedByteStream instances are not to be serialized directly"); + } + + // ================================================================= // ByteIterator @Override diff --git a/java/src/main/java/com/google/protobuf/ByteString.java b/java/src/main/java/com/google/protobuf/ByteString.java index 7da56127..bd9c2b55 100644 --- a/java/src/main/java/com/google/protobuf/ByteString.java +++ b/java/src/main/java/com/google/protobuf/ByteString.java @@ -34,6 +34,7 @@ import java.io.ByteArrayOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; +import java.io.Serializable; import java.io.UnsupportedEncodingException; import java.nio.ByteBuffer; import java.util.ArrayList; @@ -57,7 +58,7 @@ import java.util.NoSuchElementException; * @author carlanton@google.com Carl Haverl * @author martinrb@google.com Martin Buchholz */ -public abstract class ByteString implements Iterable<Byte> { +public abstract class ByteString implements Iterable<Byte>, Serializable { /** * When two strings to be concatenated have a combined length shorter than diff --git a/java/src/main/java/com/google/protobuf/LiteralByteString.java b/java/src/main/java/com/google/protobuf/LiteralByteString.java index 127c574d..767b9f35 100644 --- a/java/src/main/java/com/google/protobuf/LiteralByteString.java +++ b/java/src/main/java/com/google/protobuf/LiteralByteString.java @@ -51,6 +51,8 @@ import java.util.NoSuchElementException; */ class LiteralByteString extends ByteString { + private static final long serialVersionUID = 1L; + protected final byte[] bytes; /** diff --git a/java/src/main/java/com/google/protobuf/RopeByteString.java b/java/src/main/java/com/google/protobuf/RopeByteString.java index d1655b80..fa23c9dd 100644 --- a/java/src/main/java/com/google/protobuf/RopeByteString.java +++ b/java/src/main/java/com/google/protobuf/RopeByteString.java @@ -30,8 +30,10 @@ package com.google.protobuf; +import java.io.InvalidObjectException; import java.io.IOException; import java.io.InputStream; +import java.io.ObjectInputStream; import java.io.OutputStream; import java.io.UnsupportedEncodingException; import java.io.ByteArrayInputStream; @@ -772,6 +774,20 @@ class RopeByteString extends ByteString { } // ================================================================= + // Serializable + + private static final long serialVersionUID = 1L; + + Object writeReplace() { + return new LiteralByteString(toByteArray()); + } + + private void readObject(ObjectInputStream in) throws IOException { + throw new InvalidObjectException( + "RopeByteStream instances are not to be serialized directly"); + } + + // ================================================================= // ByteIterator @Override |