是否优化了协议缓冲区以将java nio用于文件IO?

时间:2012-07-04 00:48:49

标签: java protocol-buffers nio

我正在使用协议缓冲区,我想知道是否:

mergeDelimitedFrom(FileInputStream fis)

方法优化使用java nio?我真的不想去src找出来...但也许我愿意。我觉得它应该或可以选择使用它们。我猜它不是。如果没有 - 我想你必须自己解析字节并手动处理分隔符,如果你想要nio?

现在对nio api没有超级自信但是你不打电话:

 getChannel()

在FileInputStream上使用nio,假设可以使用nio,因为向mergeDelimitedFrom方法提供了FileInputStream?

相关帖子,但更多针对网络IO:

Using Google Protocol Buffers with Java NIO?

1 个答案:

答案 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。