タグ

developmentとnioに関するKanasansoftのブックマーク (9)

  • 「New I/Oで高速な入出力」第6回 ノンブロッキングI/Oを使ってみる:ITpro

    先週はノンブロッキングI/Oがどういうものかを解説し,ベンチマークを行ってみました。今週は実際にコードを書いてみましょう。 ノンブロッキングI/Oが真価を発揮するのはサーバーなので,ここでもサーバーに関して解説します。 Selectorクラス ノンブロッキングの主役となるのが,先週言及したjava.nio.channels.Selectorクラスです。 主役がSelectorクラスだとしたら,脇役は? 脇役として登場するのはjava.nio.channels.SelectableChannelクラスです。そして,黒子としてjava.nio.channels.SelectionKeyクラスがいます。 Selectorクラスは入出力に関する操作を監視するためのクラスです。監視する対象であるチャネルがSelectableChannelクラスになります。 SelectableChannelクラスは

    「New I/Oで高速な入出力」第6回 ノンブロッキングI/Oを使ってみる:ITpro
  • 「New I/Oで高速な入出力」第5回 処理をブロックしないI/O

    今まで,この連載では月ごとにテーマを決めて解説を行うというスタイルで行ってきました。今月はちょっと変則的なのですが,月の前半と後半に分けてみます。 というのも,今月の15日から4日間,Javaの最大のお祭りJavaOneがサンフランシスコで開催されるからです。また,前日の4月14日にはNetBeans Dayも開催されます。 4日間の会期中,テクニカルセッション,BOF,ハンズオンラボを含めて300以上のセッションが,朝8時30分から夜中の11時30分までびっちりと行われます。まさに,Java漬けの一週間です。 筆者もJavaOneに参加するので,今月の後半はJavaOneのレポートをお送りする予定です。 ブロックしないということはどういうこと? さて,話をNew I/Oに戻しましょう。 今回はノンブロッキングI/Oについて取りあげます。 ノンブロッキングI/Oとは,処理をブロックすること

    「New I/Oで高速な入出力」第5回 処理をブロックしないI/O
  • 「New I/Oで高速な入出力」第4回 チャネルを使ってみよう

    チャネルのクラス構成 先週はバッファだけでしたが,今週はチャネルも組みあわせて使っていきましょう。 チャネルはストリームの代わりになるクラス群です。大もとになるのはjava.nio.channels.Channelインタフェースです。とはいうものの,ChannelインタフェースにはcloseメソッドとisOpenメソッドしか定義されていません。実際の入出力は,Channelインタフェースから派生したインタフェースを使用します。 入力はReadableByteChannelインタフェース,出力はWritableByteChannelインタフェースで定義します。このほか,大量の入力を扱うScatteringByteChannelインタフェース,同様に大量の出力を扱うGatheringByteChannelインタフェースが提供されています。 これらのインタフェースはすべて名前にByteを含んでい

    「New I/Oで高速な入出力」第4回 チャネルを使ってみよう
  • 「New I/Oで高速な入出力」第3回 バッファを使ってみよう

    バッファはプリミティブに特化したデータ・コンテナのクラスです。ArrayListクラスなどのコレクションとは異なり,オブジェクトを保持することはできないし,サイズを変更することもできません。また,バッファに異なる型の値を保持することもできません。 これらの機能の制限は,入出力に特化していることに起因しています。基的に入出力ではバイトが読み書きできればいいので,この割り切りは潔いですね。 バッファの特徴を列挙しておきます。 プリミティブに限定したコンテナ サイズ不変 型の混合は不可 基的にシーケンシャル・アクセス(ランダム・アクセスも可能) position,limit,capacityという三つのプロパティを持つ ヒープ外のメモリーへの直接アクセスをサポート バッファは,基底クラスとなるjava.nio.Bufferクラスと,intなどの型ごとに定義されている派生クラスから構成されてい

    「New I/Oで高速な入出力」第3回 バッファを使ってみよう
  • 「New I/Oで高速な入出力」第2回 バッファとチャネルを使用した入出力

    先週はNew I/Oを紹介しました。今週からは実際に使ってみましょう。 ここで使用するサンプルは「ファイルのコピー」を行います。ストリームを使用したものが1種類とNew I/Oを使用したものが3種類,合計4種類のサンプルになります。 サンプルのダウンロードfilecopy.zip filecopy.zipにはソースコードとJDK 5.0 update 6でコンパイルしたクラスファイルが含まれています。 使い方はすべて同一で,引数にコピー元のファイルとコピー先のファイルを指定します。例えば,ストリーム版サンプルでsource.txtをdestination.txtにコピーする場合は次のようになります いろいろなサイズのファイルをコピーしてみると,コピー速度の違いを感覚的に理解できるはずです。 とはいうものの,どの程度違うか具体的な数字がないとわからないですね。そこで,テストを行うためのCop

    「New I/Oで高速な入出力」第2回 バッファとチャネルを使用した入出力
  • Java SE 7徹底理解 第6回 New I/O 2で非同期I/O

    先々月、先月とNIO2の新しいファイルシステムについて解説してきました。今月は、NIO2の残りの機能である非同期I/Oとソケットチャネルでのマルチキャストについて解説していきます。 なお、ここではNIO2の機能を中心に解説するため、バッファやチャネルなどNIOの機能に関しては特に解説を加えておりません。NIOについては、連載では2006年の4月から5月にかけて「New I/Oで高速な入出力」と題して解説していますので、そちらをご参照ください。 通常のI/O 一般的に入出力処理を行う場合、処理が完了するまで制御が戻ってくることはありません。たとえば、インプットストリームでstream.read(bytes);と記述した場合、読み込みが終了するまでreadメソッドが戻ってくることはありません(例外が発生することはあります)。つまり、処理がブロックされるわけです。 入出力が高速に行われるのであ

    Java SE 7徹底理解 第6回 New I/O 2で非同期I/O
  • Java SE 7徹底理解 第5回 New I/O 2の新しいファイルシステムインタフェース その2

    先月に引き続き、今月もNIO2で導入されたファイルシステムインタフェースについて紹介していきます。 簡単に前回のおさらいをしておきましょう。 新しいファイルシステムインタフェースは、既存のFileクラスの欠点を解決すべく導入されたAPIです。 ファイルシステムを表すのがjava.nio.file.FileSystemクラス、java.io.Fileクラスに対応するのがjava.nio.file.Pathインタフェースです。Pathオブジェクトに対するユーティリティメソッドはjava.nio.file.Filesクラスで提供されています。 先月はPathオブジェクトの生成、Fileオブジェクトとの相互変換、入出力などに関して説明を加えました。今月はFilesクラスで提供している機能を中心に説明を加えていきます。 ファイル・ディレクトリの作成 はじめに、ファイルやディレクトリを作成するところか

    Java SE 7徹底理解 第5回 New I/O 2の新しいファイルシステムインタフェース その2
  • Java SE 7徹底理解 第4回 New I/O 2の新しいファイルシステムインタフェース その1 | 日経 xTECH(クロステック)

    今回は、J2SE 1.4.0の話からはじめましょう。 J2SE 1.4.0がリリースされたのが2002年。すでに9年も経ってしまいました。 さすがに最近こそ使われなくなったものの、日においてはJ2SE 1.4.xが一番多く使われていたバージョンなのではないでしょうか。 そのJ2SE 1.4.0の時に新機能として導入されたのが、JSR 51 New I/O APIs for the Java Platform、通称NIOです。 NIOは、java.ioを補う新しいI/Oに関するAPIで、入出力に特化したバッファや、ストリームよりも高効率なチャネルなどを提供しています。また、ノンブロッキングI/OもNIOで導入されました。 NIOは一般にはそれほど使われていないようですが、GlassFishやTomcatなど多くのフレームワークやライブラリで導入されています。 しかし、JSR 51は当初から

    Java SE 7徹底理解 第4回 New I/O 2の新しいファイルシステムインタフェース その1 | 日経 xTECH(クロステック)
  • 「New I/Oで高速な入出力」第1回 New I/Oをご存じですか

    Java SEには便利な機能が数多くあるのですが,新しい機能ほど活用されていないのではないでしょうか。筆者がJ2SE 1.4であまり使われていないのではないかと感じる機能を挙げてみます。 Assertion New I/O Image I/O Preferences API Logging API AssertionやLogging APIは,JUnitLog4Jなどのオープンソースのプロダクトで置き換えられるので,それほど使われていなくても不思議ではありません。 しかし,JPEGのイメージを出力するために,いまだにcom.sun.image.codec.jpeg.JPEGImageEncoderクラスを使用しているのは腑に落ちません。J2SE 1.3の頃に作られたアプリケーションであればわかりますが,J2SE 1.4以降に作られたアプリケーションではImage I/Oを使うべきではない

    「New I/Oで高速な入出力」第1回 New I/Oをご存じですか
  • 1