我正在使用协议缓冲区,我想知道是否:
mergeDelimitedFrom(FileInputStream fis)
方法优化使用java nio?我真的不想去src找出来...但也许我愿意。我觉得它应该或可以选择使用它们。我猜它不是。如果没有 - 我想你必须自己解析字节并手动处理分隔符,如果你想要nio?
现在对nio api没有超级自信但是你不打电话:
getChannel()
在FileInputStream上使用nio,假设可以使用nio,因为向mergeDelimitedFrom方法提供了FileInputStream?
相关帖子,但更多针对网络IO:
答案 0 :(得分:-1)
我认为这段代码不是生成代码的一部分,但我想是......
MergeDelimitedFrom调用下面的CodedInputStream.readRawVarint32:
public static int readRawVarint32(
final int firstByte, final InputStream input) throws IOException {
if ((firstByte & 0x80) == 0) {
return firstByte;
}
int result = firstByte & 0x7f;
int offset = 7;
for (; offset < 32; offset += 7) {
final int b = input.read();
if (b == -1) {
throw InvalidProtocolBufferException.truncatedMessage();
}
result |= (b & 0x7f) << offset;
if ((b & 0x80) == 0) {
return result;
}
}
// Keep reading up to 64 bits.
for (; offset < 64; offset += 7) {
final int b = input.read();
if (b == -1) {
throw InvalidProtocolBufferException.truncatedMessage();
}
if ((b & 0x80) == 0) {
return result;
}
}
throw InvalidProtocolBufferException.malformedVarint();
}
看起来像普通的旧java.io。