java.nio.*

Java開発のメインストリームは、既にJava2 SE 5.0に移り変わろうとしているが、これはJava2 SE 1.4で新たに導入されたパッケージ。特に重要だと感じているのは、以下のクラス又はインタフェースであり、外部とのI/Oやネットワークプログラミングが必要なシステムでは習得は必須。

  • Buffer : プリミティブの操作に特化した、サイズ固定の入れ物
  • Channel : I/O 処理を効率よく行うための、ファイルやソケットなどの新たな抽象化
  • Selector : いわゆるselect()を実現する、Channelを扱うマルチプレクサ

Bufferを基としているByteBufferや、ServerSocket、Channelと組み合わせて使うSelectorは、今になってみると、これが無いと効率良く書けない処理がたくさんあるのではないだろうか。ストリーム指向のI/Oは万能だと思われていた向きがあるけれど、企業システムにおいては、固定長のデータ指向で考えたほうがしっくりくる処理も多い。

私はまだJ2SE1.4がβだった頃に、ByteBufferがJavaヒープ外にダイレクトにバッファをアロケートできることを知って驚喜した記憶がある。Delphiで書かれたJNIのブリッジ用インタフェースを見て思い出した。