ASH | サーバ | セキュリティ | Linux | FreeBSD | DB | Web | CGI | Perl | Java | XML | プログラム | ネットワーク | 標準 | Tips集

Javaの入出力(Stream)について

 Javaの入出力は、java.io.* クラスを使って行います。

JavaのStream

 Javaでは、各種データをストリームとして扱うことができます。 ストリームデータには、ファイル内のデータ、標準入力や標準出力、通信データ、文字列データなどがあります。
 ストリームには、バイト単位に扱う最も下位のクラスと、バッファリングしたり文字コード変換を行うクラスと、行単位で入出力を行うクラスがあり、組み合わせて使います。

バイトストリームを扱うStreamクラス

 バイト単位で扱うストリームで、各種データをバイトストリーム形式に変換するクラスです。

クラス名機能 形式入出力
FileInputStream ファイルのデータを読み込むバイトストリームを作成 バイト入力
FileOutputStream ファイルにデータを書き込むバイトストリームを作成 バイト出力
Socket::getInputStream() 通信ソケットから受信するバイトストリームを取得 バイト入力
Socket::getOutPutStream() 通信ソケットに送信するバイトストリームを取得 バイト出力
ServletRequest::getInputStream() サーブレットのリクエスト入力バイトストリームを取得 バイト入力
ServletResponse::getOutputStream() サーブレットのレスポンス出力バイトストリームを取得 バイト出力

バイトストリームと文字ストリームの変換を行うStreamReader/Writerクラス

 バイトストリームと文字ストリームの変換を行うクラスで、InputStreamReaderクラスとOutputStreamWriterクラスがあります。
 文字コード変換などの機能を持っています。 文字コード変換処理が不要な場合は、使う必要はありません。

クラス名機能 形式入出力
InputStreamReader バイトストリームのデータを、文字ストリームに変換
指定された「文字エンコーディング」に従って、文字コード変換
バイト→文字
エンコードあり
入力
OutputStreamWriter 文字ストリームのデータを、バイトストリームに変換
指定された「文字エンコーディング」に従って、文字コード変換
文字→バイト
エンコードあり
出力

 Javaでサポートしている日本語のエンコードには、以下の種類があります。 InputStreamでは、JISAutoDetectを指定すると、文字コードを自動判定しUnicodeに変換してくれます。 当然ですが、Readerクラスでのみ指定可能です。
 文字コードについての詳細は、文字コードについてのページを参考にしてください。
 JDK1.1では、Java独自形式しかサポートしていませんでしたが、現在では、IANAが規定している標準的なエンコード形式にも対応しています。

Javaエンコード名対応する文字コード
ISO-2022-JP
ISO2022JP
JISコード(ISO-2022-JP)
Shift_JIS
SJIS
シフトJISコード(Shift_JIS)
EUC-JP
EUC_JP
日本語EUCコード(EUC-JP)
UTF-8Unicode(UTF-8)
UTF-16Unicode(UTF-16)
JISAutoDetect文字コードの自動判定(Readerクラスのみ利用可)

文字ストリームを扱うReader/Writerクラス

 文字ストリームを扱うクラスで、行単位の入出力が可能なクラスです。 Streamクラスや、StreamReader/StreamWriterクラスと組み合わせて利用します。
 バッファリングせずにバイト単位で処理する場合は、使う必要はありません。

クラス名機能 形式入出力
BufferedReader 文字、配列、行をバッファリングして、文字ストリームから効率良く入力 文字入力
BufferedWriter 文字、配列、行をバッファリングして、文字ストリームに効率良く出力 文字出力
PrintWriter フォーマットされたオブジェクトの表現を文字ストリームに出力 文字出力

ソースの記述例

import java.io.*;

// ファイルからバイト単位で読み込む例
FileInputStream in = new FileInputStream("ファイル名");
// ファイルからバイト単位で書き込む例
FileOutputStream out = new FileOutputStream("ファイル名");

// Shift_JISのファイルから文字コード変換して読み込む例
BufferedReader in = new BufferedReader(new InputStreamReader(new FileInputStream("ファイル名"), "Shift_JIS"));
// Shift_JISのファイルから文字コード変換して書き込む例
PrintWriter out = new PrintWriter(new OutputStreamWriter(new FileOutputStream("ファイル名"), "Shift_JIS"));

// サーブレットでリクエストデータを文字コードを自動変換して読み込む例
BufferedReader in = new BufferedReader(new InputStreamReader(req.getInputStream(), "JISAutoDetect"));
// サーブレットでレスポンスデータをEUCコードに変換して書き込む例
PrintWriter out = new PrintWriter(new OutputStreamWriter(res.getOutputStream(), "EUC-JP"));


Copyright (C)1995-2002 ASH multimedia lab.
mail : info@ash.jp