Google Protobuf ByteString与Byte []

我正在使用Java中的Google protobuf。我看到可以将protobuf消息序列化为String,byte

[],ByteString等:(来源:https :

//developers.google.com/protocol-

buffers/docs/reference/java/com/google/protobuf /

MessageLite)

我不知道什么是ByteString。我从protobuf

API文档中获得了以下定义(来源:https :

//developers.google.com/protocol-

buffers/docs/reference/java/com/google/protobuf/ByteString):“字节的固定序列。子字符串与String一样,通过共享对不可变基础字节的引用来支持。”

我不清楚ByteString与String或byte []有何不同。有人可以解释一下吗?谢谢。

回答:

您可以将其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 [] 的全部内容, 来源链接: utcz.com/qa/397940.html

回到顶部