ゼロから学ぶJavaの入出力:ストリームを理解する
翻訳校正:原井彰弘
Javaにおいて入出力の基本となるストリームの操作方法をいくつか紹介する。まずJavaのストリームとは何なのかから解説しよう
Javaではすべての入出力がストリームベースになっている。そのため、一度ストリームの構文を覚えてしまえば、どのようなタイプの入出力も扱えるようになる。本稿では、Javaにおけるストリームの操作方法をいくつか紹介する。
Javaの入出力(I/O)機能を利用すると、標準化されたシンプルなAPIを用いて、さまざまなデータソースからの文字やバイトデータを読み書きできるようになる。本稿では、入出力関連のクラスやインタフェースを調べ、Javaプラットフォーム上でどのような操作を行うことが可能であるかを検証する。それでは、まずJavaのストリームとは何なのかを調べてみよう。
ストリーム
Javaの入出力機能はすべて、文字やバイトシーケンスの流れを表す「ストリーム」という概念をもとに設計されている。Javaにおいては、ストリームはデータの読み書きを行う標準化された機構であり、Javaに含まれている可変のデータソースを表すオブジェクトはすべて、ストリームとしてデータを読み書きするメソッドを提供している。
ストリーム指向の入出力を扱うクラスは、多くの場合java.ioパッケージに含まれている。このパッケージの中心となるのはInputStreamクラス、OutputStreamクラスの2つの抽象クラスだ。他のストリーム指向のクラスは、すべてこれらのクラスを拡張して定義されている。
java.ioパッケージには、文字やバイトの読み書き操作を行うInputStreamクラス、OutputStreamクラスをはじめ、便利な抽象化機能を提供するクラスやインタフェースが多数含まれている。例を挙げると、ObjectInputStreamクラスはストリームからのデータをJavaのオブジェクトとして読み取る機能を提供している。また、ObjectOutputStreamクラスはJavaのオブジェクトをストリームへ書き込む機能を提供している。
読み取りと書き込みの最適化
JDK 1.1では、読み書き関連のクラスが多数追加され、より使い勝手を考慮した抽象化や入出力パフォーマンスの改善が行われた。例としては、文字ベースで入力ストリームや出力ストリームへの読み書き機能を提供するBufferedReaderクラスとBufferedWriterクラスが挙げられる。BufferedReaderクラスでは、バッファを利用して複数の文字や配列、行単位での読み取りをより効率的に行っている。また、BufferedWriterクラスでも、バッファを利用して複数の文字や配列、文字列の書き込みをより効率的に行っている。これらBufferedReaderクラスやBufferedWriterクラスで利用されるバッファのサイズは、自由に調整することが可能である。
Javaの入出力フレームワークには、読み書きを行うクラスはほかにも多数含まれている。たとえば、LineNumberReaderクラス、CharArrayReaderクラス、FileReaderクラス、FilterReaderクラス、PushbackReaderクラス、PipedReaderクラス、StringReaderクラスなどはすべてそうである。これらのクラスはInputStreamクラスやOutputStreamクラスのラッパであるため、類似したメソッドを提供している。しかし一方で、ファイルや文字配列、文字列などの読み書きに特化した、より効率的で便利な抽象化機能も備えている。
データの読み取り
入力ストリームは普通、データソースオブジェクトから取り出したり、読み取り関連のストリームオブジェクトを作成した際に、自動的に開かれる。たとえば、ファイルの入力ストリームを開くには、ファイルの名前をjava.io.FileReaderクラスのコンストラクタに渡すだけでよい。例を次に示す。
java.io.FileReader fileReader = new java.io.FileReader("/home/me/myfile.txt");
FileReaderの入力ストリームから次のバイトデータを読み取るには、パラメータを付加せずにreadメソッドを呼び出す。リストAに示されているのは、ファイルからテキストを1文字ずつ読み取り、System.outに書き込むプログラムの一部である。
リストA
int aChar = 0;
while ((aChar = fileReader.read()) >= 0)
{
System.out.print((char)aChar);
}
入力ストリームからcharの配列へ指定したバイト数を読み取るには、char[]型のパラメータを1つ受け取るreadメソッドを使用する。配列の長さは、一度に読み取る文字数を決めるのに用いられる。次に示すリストBではこのテクニックを実際に利用している。
- 2人の推薦記事
- 0人がクリップ
-
ソーシャルブックマーク(-)
- トラックバック(0)
- ホワイトペーパー
- 話題のタグ
文字にドロップシャドウの効果をつける--FirefoxとSafariのCSS対応
iPhoneにAdiumが載らない2つの理由
iPhone 3Gの節電術
マイクロソフトはIE 8で地雷を踏んだ?
マイクロソフト、Internet Explorer 8のベータ2をリリース
「iPhone」のパスコードロックに深刻な脆弱性--連絡先情報が読み取られる危険も
Windows XPのバックアップユーティリティについて知っておくべき10のこと
S・ウォズニアック氏:「エンジニアは自分の心に従って行動すべき」--IDFインタビュー
Firefox 3.1のHTML 5対応を検証--Canvas Text APIとCanvas Shadow API
グーグルが、無料社食をついに廃止?--真実はいかに
iPhoneからサーバにSSHログイン:TouchTerm
トップページにみる日本のウェブデザイン--表現したい人たちが集うMySpace
モジラ、「Firefox 3.1」でJavaScript実行を大幅に高速化
DELLが掲げる「新・仮想化アセスメントサービス」
仮想化環境で求められるストレージの要件
Webセキュリティ特集
ZDNet Japan Green IT
「シンプル」&「低コスト」な運用管理
ZDNet Japan ホスティング特集
セキュリティ対策レベルテスト公開!
APC SOLUTIONS FORUM 2008をレポート
Techno Exchange