0

私はプロトコルバッファを扱っていますが、次のことを疑問に思っています:

mergeDelimitedFrom(FileInputStream fis)

メソッドは Java nio を使用するように最適化されていますか? 私は本当に src に行って調べようとは思わない... でも多分行くだろう. 両方を使用する必要がある、または使用するオプションがあるように感じます。私はそうではないと推測しています。そうでない場合-nioが必要な場合は、バイトを自分で解析し、区切り文字を手動で処理する必要があると思いますか?

現在、nio API にあまり自信がありませんが、次のように呼び出してはいけません:

 getChannel()

FileInputStream で nio を使用するため、FileInputStream が mergeDelimitedFrom メソッドに提供されているため、仮想的には nio を使用できますか?

関連する投稿ですが、ネットワーク IO を対象としています。

Java NIO で Google プロトコル バッファを使用しますか?

4

1 に答える 1

-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 のように見えます。

于 2012-07-04T02:20:54.750 に答える