InputStreamをByteBufferを使って読み込む

  • ファイルの分割を行う場合などに活躍する 正直、昔ながらのbyte配列書き出ししか見たことなかったので、
    後ほどByteBufferというか、NIO自体を学びなおそうと思っている。

  • ReadableByteChannelを使う

final ByteBuffer buffer = ByteBuffer.allocate(5 * 1024 * 1024);
final ReadableByteChannel channel = Channels.newChannel(is);
while (channel.read(buffer) != -1) {
  // 読みだしたbyteに対して、ByteBufferを経由して処理を行う。
}

ReadableByteChannelには、このようなJavaDocの記載がある

バイトを読み取ることができるチャネルです。  読込み可能なチャネル上で、並行して複数の読込み操作を実行することはできません。 チャネル上で読込み操作を開始したスレッドがある場合、新たな読込み操作を開始しようとする別のスレッドは、最初の操作が完了するまでブロックされます。 読込み操作とその他の入出力操作を同時並行で実行できるかどうかは、チャネルの種類によって決まります。

よくわからんけど、おそらく順々にしかファイル読み込みが行えないものかな?  ⇒要調査
NIOは並列処理を強化してあるので、InputStreamのようなIOに対応させるためのブリッジのようなものかもしれない。