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