簡體   English   中英

是否對協議緩沖區進行了優化,以將java nio用於文件IO?

[英]Is protocol buffers optimized to use java nio for file IO?

我正在使用協議緩沖區,想知道是否:

mergeDelimitedFrom(FileInputStream fis)

方法是否經過優化以使用Java Nio? 我真的不喜歡去src找出...但是也許我會。 我覺得應該或可以選擇兩者都使用。 我猜不是。 如果不是,我想您需要親自分析字節並手動處理定界符?

現在對Nio API不太自信,但您不只是打電話:

 getChannel()

在FileInputStream上使用nio,因此可以假設使用nio,因為將FileInputStream提供給mergeDelimitedFrom方法?

相關文章,但更多針對網絡IO:

將Google協議緩沖區與Java NIO一起使用?

我以為該代碼不是生成的代碼的一部分,但我想它是...

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。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM