您可以将其
ByteString视为不可变的字节数组。就是这样。
byte[]您可以在protobuf中使用它。Protobuf不允许您使用Java数组,因为它们是可变的。
ByteString之所以存在,
String是因为它不适合表示任意字节序列。
String专用于字符数据。
protobuf MessageLite接口提供toByteArray()和toByteString()方法。如果ByteString是不可变的byte
[],则由ByteString和byte []表示的消息的字节表示形式是否相同?
有点。如果您致电,
toByteArray()您将获得与致电相同的值
toByteString().toByteArray()。比较以下两种方法的实现
AbstractMessageLite:
public ByteString toByteString() { try { final ByteString.CodedBuilder out = ByteString.newCodedBuilder(getSerializedSize()); writeTo(out.getCodedOutput()); return out.build(); } catch (IOException e) { throw new RuntimeException( "Serializing to a ByteString threw an IOException (should " + "never happen).", e); }}public byte[] toByteArray() { try { final byte[] result = new byte[getSerializedSize()]; final CodedOutputStream output = CodedOutputStream.newInstance(result); writeTo(output); output.checkNoSpaceLeft(); return result; } catch (IOException e) { throw new RuntimeException( "Serializing to a byte array threw an IOException " + "(should never happen).", e); }}

![Google Protobuf ByteString与Byte [] Google Protobuf ByteString与Byte []](http://www.mshxw.com/aiimages/31/464421.png)
