JavaTM 2 Platform
Standard Ed. 5.0

java.io
インタフェース DataInput

既知のサブインタフェースの一覧:
ImageInputStream, ImageOutputStream, ObjectInput
既知の実装クラスの一覧:
DataInputStream, FileCacheImageInputStream, FileCacheImageOutputStream, FileImageInputStream, FileImageOutputStream, ImageInputStreamImpl, ImageOutputStreamImpl, MemoryCacheImageInputStream, MemoryCacheImageOutputStream, ObjectInputStream, RandomAccessFile

public interface DataInput

バイナリストリームからバイトを読み込み、そこから Java のプリミティブ型のどれかでデータを再作成するために提供されています。また、修正 UTF-8 形式のデータから String を再作成する機能もあります。

このインタフェースのすべての読み込みルーチンでは、必要なバイト数が読み込まれる前にファイルの終わりに達した場合は、通常、EOFException (IOException の一種) がスローされます。ファイルの終わりに達したという以外の理由でバイトの読み込みに失敗した場合は、EOFException 以外の IOException がスローされます。特に、入力ストリームが閉じられていると、IOException がスローされます。

修正 UTF-8

DataInput および DataOutput インタフェースの実装は、UTF-8 を若干修正した形式の Unicode で文字列を表現します。(標準的な UTF-8 形式の詳細については、「The Unicode Standard, Version 4.0」の「3.9 Unicode Encoding Forms」のセクションを参照)。次の表では、左端の列が最上位ビットです。

'\u0001''\u007F' までの範囲の文字はすべて 1 個のバイトで表現されます。

ビット値
バイト 1
0
ビット 6-0

null 文字 '\u0000''\u0080''\u07FF' の範囲の文字は 2 個のバイトで表現されます。

ビット値
バイト 1
1
1
0
ビット 10-6
バイト 2
1
0
ビット 5-0

'\u0800''\uFFFF' の範囲の char 値は 3 個のバイトで表現されます。
ビット値
バイト 1
1
1
1
0
ビット 15-12
バイト 2
1
0
ビット 11-6
バイト 3
1
0
ビット 5-0

標準 UTF-8 形式とこの形式とは、次の点で異なります。

導入されたバージョン:
JDK1.0
関連項目:
DataInputStream, DataOutput

メソッドの概要
 boolean readBoolean()
          1 バイトの入力データを読み込んで、そのバイトがゼロ以外の場合は true、そのバイトがゼロの場合は false を返します。
 byte readByte()
          1 バイトの入力データを読み込んで返します。
 char readChar()
          入力データの char を読み込んで、char 値を返します。
 double readDouble()
          8 バイトの入力データを読み込んで、double 値を返します。
 float readFloat()
          4 バイトの入力データを読み込んで、float 値を返します。
 void readFully(byte[] b)
          入力ストリームからいくつかのバイトを読み込んで、バッファ配列 b に格納します。
 void readFully(byte[] b, int off, int len)
          入力ストリームから len バイトを読み込みます。
 int readInt()
          4 バイトの入力データを読み込んで、int 値を返します。
 String readLine()
          入力ストリームから、次の行のテキストを読み込みます。
 long readLong()
          8 バイトの入力データを読み込んで、long 値を返します。
 short readShort()
          2 バイトの入力データを読み込んで、short 値を返します。
 int readUnsignedByte()
          1 バイトの入力データを読み込んで、int 型にゼロ拡張して結果を返します。
 int readUnsignedShort()
          2 バイトの入力データを読み込んで、065535 の範囲の int 値を返します。
 String readUTF()
          修正 UTF-8 形式でエンコードされた文字列を読み込みます。
 int skipBytes(int n)
          入力ストリームから n バイトをスキップするようにして、スキップしたバイトを破棄します。
 

メソッドの詳細

readFully

void readFully(byte[] b)
               throws IOException
入力ストリームからいくつかのバイトを読み込んで、バッファ配列 b に格納します。読み込まれるバイト数は b の長さに一致します。

このメソッドは、以下の条件の 1 つが発生するまでブロックします。

bnull の場合、NullPointerException がスローされます。b.length がゼロの場合、読み込まれるバイトはありません。そうでない場合、読み込まれる最初のバイトは要素 b[0] に、次のバイトは要素 b[1] にと順次格納されていきます。このメソッドから例外がスローされると、b のすべてではないにしても一部のバイトが入力ストリームのデータで更新されています。

パラメータ:
b - データの読み込み先のバッファ
例外:
EOFException - すべてのバイトを読み込む前に、このストリームの終わりに達した場合
IOException - 入出力エラーが発生した場合

readFully

void readFully(byte[] b,
               int off,
               int len)
               throws IOException
入力ストリームから len バイトを読み込みます。

このメソッドは、以下の条件の 1 つが発生するまでブロックします。

bnull の場合、NullPointerException がスローされます。off が負の値の場合、len が負の値の場合、あるいは off+len が配列 b の長さよりも大きい場合、IndexOutOfBoundsException がスローされます。len がゼロの場合、読み込まれるバイトはありません。そうでない場合、読み込まれる最初のバイトは要素 b[off] に、次のバイトは要素 b[off+1] にと順次格納されていきます。読み込まれるバイト数は、最大でも len までです。

パラメータ:
b - データの読み込み先のバッファ
off - データへのオフセットを指定する int
len - 読み込むバイト数を指定する int
例外:
EOFException - すべてのバイトを読み込む前に、このストリームの終わりに達した場合
IOException - 入出力エラーが発生した場合

skipBytes

int skipBytes(int n)
              throws IOException
入力ストリームから n バイトをスキップするようにして、スキップしたバイトを破棄します。ただし、n より少ないバイト数 (ゼロの場合もある) しかスキップしない場合もあります。これは、いくつかの条件のうちの 1 つに該当した場合に発生します。n バイトをスキップする前にファイルの終わりに達してしまった場合もその 1 つです。このメソッドが EOFException をスローすることはありません。スキップされた実際のバイト数が返されます。

パラメータ:
n - スキップするバイト数
戻り値:
実際にスキップしたバイト数
例外:
IOException - 入出力エラーが発生した場合

readBoolean

boolean readBoolean()
                    throws IOException
1 バイトの入力データを読み込んで、そのバイトがゼロ以外の場合は true、そのバイトがゼロの場合は false を返します。このメソッドは、DataOutput インタフェースの writeBoolean メソッドが書き込むバイトを読み込むのに適しています。

戻り値:
読み込まれた boolean の値
例外:
EOFException - すべてのバイトを読み込む前に、このストリームの終わりに達した場合
IOException - 入出力エラーが発生した場合

readByte

byte readByte()
              throws IOException
1 バイトの入力データを読み込んで返します。読み込み対象バイトは -128127 の範囲 (上下限値を含む) の符号付きの値として処理されます。このメソッドは、DataOutput インタフェースの writeByte メソッドによって書き込まれたバイトを読み込むのに適しています。

戻り値:
読み込まれた 8 ビットの値
例外:
EOFException - すべてのバイトを読み込む前に、このストリームの終わりに達した場合
IOException - 入出力エラーが発生した場合

readUnsignedByte

int readUnsignedByte()
                     throws IOException
1 バイトの入力データを読み込んで、int 型にゼロ拡張して結果を返します。このため、結果は 0255 の範囲内になります。DataOutput インタフェースの writeByte メソッドの引数がこの範囲内の値になるように意図されている場合、このメソッドは writeByte メソッドによって書き込まれたバイトを読み込むのに適しています。

戻り値:
読み込まれた符号なし 8 ビットの値
例外:
EOFException - すべてのバイトを読み込む前に、このストリームの終わりに達した場合
IOException - 入出力エラーが発生した場合

readShort

short readShort()
                throws IOException
2 バイトの入力データを読み込んで、short 値を返します。a を 1 番目のバイト、b を 2 番目のバイトとすると、戻り値は次のようになります。

(short)((a <<
 8) | (b &
 0xff))
このメソッドは、DataOutput インタフェースの writeShort メソッドによって書き込まれたバイトを読み込むのに適しています。

戻り値:
読み込まれた 16 ビットの値
例外:
EOFException - すべてのバイトを読み込む前に、このストリームの終わりに達した場合
IOException - 入出力エラーが発生した場合

readUnsignedShort

int readUnsignedShort()
                      throws IOException
2 バイトの入力データを読み込んで、065535 の範囲の int 値を返します。a を 1 番目のバイト、b を 2 番目のバイトとすると、戻り値は次のようになります。

(((a &
 0xff) <<
 8) | (b &
 0xff))
DataOutput インタフェースの writeShort メソッドの引数が 065535 の範囲の値になるように意図されている場合、このメソッドは writeShort メソッドによって書き込まれたバイトを読み込むのに適しています。

戻り値:
読み込まれた符号なし 16 ビットの値
例外:
EOFException - すべてのバイトを読み込む前に、このストリームの終わりに達した場合
IOException - 入出力エラーが発生した場合

readChar

char readChar()
              throws IOException
入力データの char を読み込んで、char 値を返します。Unicode char は 2 バイトから構成されます。a を 1 番目のバイト、b を 2 番目のバイトとすると、戻り値は次のようになります。

(char)((a <<
 8) | (b &
 0xff))
このメソッドは、DataOutput インタフェースの writeChar メソッドによって書き込まれたバイトを読み込むのに適しています。

戻り値:
読み込まれた Unicode char の値
例外:
EOFException - すべてのバイトを読み込む前に、このストリームの終わりに達した場合
IOException - 入出力エラーが発生した場合

readInt

int readInt()
            throws IOException
4 バイトの入力データを読み込んで、int 値を返します。a を 1 番目、b を 2 番目、c を 3 番目、d を 4 番目のバイトとすると、戻り値は次のようになります。


  (((a & 0xff) << 24) | ((b & 0xff) << 16) |  ((c & 0xff) << 8) | (d & 0xff)) 
このメソッドは、DataOutput インタフェースの writeInt メソッドによって書き込まれたバイトを読み込むのに適しています。

戻り値:
読み込まれた int の値
例外:
EOFException - すべてのバイトを読み込む前に、このストリームの終わりに達した場合
IOException - 入出力エラーが発生した場合

readLong

long readLong()
              throws IOException
8 バイトの入力データを読み込んで、long 値を返します。a を 1 番目、b を 2 番目、c を 3 番目、d を 4 番目、e を 5 番目、f を 6 番目、g を 7 番目、h を 8 番目のバイトとすると、戻り値は次のようになります。

 
 (((long)(a & 0xff) << 56) | ((long)(b & 0xff) << 48) | ((long)(c & 0xff) << 40) | ((long)(d & 0xff) << 32) | ((long)(e & 0xff) << 24) | ((long)(f & 0xff) << 16) | ((long)(g & 0xff) <<  8) | ((long)(h & 0xff))) 

このメソッドは、DataOutput インタフェースの writeLong メソッドによって書き込まれたバイトを読み込むのに適しています。

戻り値:
読み込まれた long の値
例外:
EOFException - すべてのバイトを読み込む前に、このストリームの終わりに達した場合
IOException - 入出力エラーが発生した場合

readFloat

float readFloat()
                throws IOException
4 バイトの入力データを読み込んで、float 値を返します。このためには、まず readInt メソッドとまったく同じ方法で int 値を作成し、次にこの int 値を Float.intBitsToFloat メソッドとまったく同じ方法で float に変換します。このメソッドは、DataOutput インタフェースの writeFloat メソッドによって書き込まれたバイトを読み込むのに適しています。

戻り値:
読み込まれた float の値
例外:
EOFException - すべてのバイトを読み込む前に、このストリームの終わりに達した場合
IOException - 入出力エラーが発生した場合

readDouble

double readDouble()
                  throws IOException
8 バイトの入力データを読み込んで、double 値を返します。このためには、まず readlong メソッドとまったく同じ方法で long 値を作成し、次にこの long 値を Double.longBitsToDouble メソッドとまったく同じ方法で double に変換します。このメソッドは、DataOutput インタフェースの writeDouble メソッドによって書き込まれたバイトを読み込むのに適しています。

戻り値:
読み込まれた double の値
例外:
EOFException - すべてのバイトを読み込む前に、このストリームの終わりに達した場合
IOException - 入出力エラーが発生した場合

readLine

String readLine()
                throws IOException
入力ストリームから、次の行のテキストを読み込みます。このメソッドは、行末記号またはファイルの終わりを検出するまで、連続するバイトを読み込んで、各バイトをそれぞれ文字に変換します。読み込まれた文字は次に、String として返されます。このメソッドはバイトを処理するものなので、Unicode 文字セットの入力を完全にはサポートしません。

ファイルの終わりが検出されるまでに 1 バイトも読み込めなかった場合には、null が返されます。そうでない場合、読み込まれた各バイトはゼロ拡張によって char 型に変換されます。文字 '\n' が検出されると、この文字は破棄され、読み込みは中止されます。文字 '\r' が検出されると、この文字は破棄され、その次のバイトが文字 '\n' に変換されますが、この文字も破棄されて、読み込みが中止されます。文字 '\n' と文字 '\r' のどちらかより前にファイルの終わりが検出されると、読み込みが中止されます。読み込みが中止されると、読み込まれて破棄されていないすべての文字を取り込んだ順番で格納している String が返されます。この文字列のそれぞれの文字は \u0100、つまり (char)256 より小さい値を持ちます。

戻り値:
この入力ストリームからの次のテキスト行。ファイルの終わりが検出されるまでに 1 バイトも読み込めなかった場合は null
例外:
IOException - 入出力エラーが発生した場合

readUTF

String readUTF()
               throws IOException
修正 UTF-8 形式でエンコードされた文字列を読み込みます。readUTF の汎用規約では、修正 UTF-8 形式でエンコードされた Unicode 文字列の表現を読み込みます。読み込まれた文字列は、String として返されます。

まず、2 バイトを読み込み、それを使って readUnsignedShort メソッドとまったく同じ方法で符号なし 16 ビット整数を作成します。この整数値は「UTF 長」と呼ばれ、読み込まれる追加のバイト数を表します。次に、このバイトがグループ単位で文字に変換されます。各グループの長さは、グループの先頭バイトの値から計算されます。グループに後続のバイトがあれば、それは次のグループの先頭バイトです。

グループの先頭バイトがビットパターンの 0xxxxxxx (ただし、x0 または 1 を意味する) に一致する場合、グループはそのバイトだけで構成されます。バイトはゼロ拡張されて単一の文字を表現します。

グループの先頭バイトがビットパターン 110xxxxx に一致する場合、そのグループはそのバイト a と 2 番目のバイト b から構成されます。バイト b が存在しない場合 (バイト a が読み込まれた最後のバイトだった場合) や、バイト b がビットパターン 10xxxxxx に一致しない場合には、UTFDataFormatException がスローされます。そうでない場合、グループは次の文字に変換されます。

(char)(((a&
 0x1F) <<
 6) | (b &
 0x3F))
 
グループの先頭バイトがビットパターン 1110xxxx に一致する場合、そのグループは先頭バイト a に加えて、2 つのバイト bc から構成されます。バイト c が存在しない場合 (バイト a が読み込まれた一連のバイトの最後の 2 つに入っていた場合) や、バイト b または c がビットパターン 10xxxxxx に一致しない場合には、UTFDataFormatException がスローされます。そうでない場合、グループは次の文字に変換されます。


 (char)(((a & 0x0F) << 12) | ((b & 0x3F) << 6) | (c & 0x3F))
 
グループの先頭バイトがパターン 1111xxxx かパターン 10xxxxxx に一致する場合、UTFDataFormatException がスローされます。

この処理全体のどこかでファイルの終わりが検出されると、EOFException がスローされます。

各グループがこの処理で 1 文字に変換されると、対応するグループが入力ストリームから読み込まれたのと同じ順序で各文字が収集され、String を表現します。そして、この String が返されます。

DataOutput インタフェースの writeUTF メソッドを使うと、このメソッドで読み込むのに適したデータを書き込むことができます。

戻り値:
Unicode 文字列
例外:
EOFException - すべてのバイトを読み込む前に、このストリームの終わりに達した場合
IOException - 入出力エラーが発生した場合
UTFDataFormatException - 文字列中のバイトが、有効な修正 UTF-8 形式でエンコードされた文字列以外であった場合

JavaTM 2 Platform
Standard Ed. 5.0

バグの報告と機能のリクエスト
さらに詳しい API リファレンスおよび開発者ドキュメントについては、Java 2 SDK SE 開発者用ドキュメントを参照してください。開発者向けの詳細な解説、概念の概要、用語の定義、バグの回避策、およびコード実例が含まれています。

Copyright 2004 Sun Microsystems, Inc. All rights reserved. Use is subject to license terms. Documentation Redistribution Policy も参照してください。