|
JavaTM 2 Platform Standard Ed. 5.0 |
|||||||||
| 前のクラス 次のクラス | フレームあり フレームなし | |||||||||
| 概要: 入れ子 | フィールド | コンストラクタ | メソッド | 詳細: フィールド | コンストラクタ | メソッド | |||||||||
public interface DataInput
バイナリストリームからバイトを読み込み、そこから Java のプリミティブ型のどれかでデータを再作成するために提供されています。また、修正 UTF-8 形式のデータから String を再作成する機能もあります。
このインタフェースのすべての読み込みルーチンでは、必要なバイト数が読み込まれる前にファイルの終わりに達した場合は、通常、EOFException (IOException の一種) がスローされます。ファイルの終わりに達したという以外の理由でバイトの読み込みに失敗した場合は、EOFException 以外の IOException がスローされます。特に、入力ストリームが閉じられていると、IOException がスローされます。
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 形式とこの形式とは、次の点で異なります。
'\u0000' は 1 バイトではなく、2 バイト形式にエンコードされます。これにより、エンコードされた文字列がその中に埋め込まれた null を持つことはありません。
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 バイトの入力データを読み込んで、 0 〜 65535 の範囲の int 値を返します。 |
String |
readUTF()
修正 UTF-8 形式でエンコードされた文字列を読み込みます。 |
int |
skipBytes(int n)
入力ストリームから n バイトをスキップするようにして、スキップしたバイトを破棄します。 |
| メソッドの詳細 |
|---|
void readFully(byte[] b)
throws IOException
b に格納します。読み込まれるバイト数は b の長さに一致します。
このメソッドは、以下の条件の 1 つが発生するまでブロックします。
b.length バイトの入力データが読み込み可能。この場合、通常の値が返される
EOFException がスローされる
EOFException ではなく IOException がスローされる
b が null の場合、NullPointerException がスローされます。b.length がゼロの場合、読み込まれるバイトはありません。そうでない場合、読み込まれる最初のバイトは要素 b[0] に、次のバイトは要素 b[1] にと順次格納されていきます。このメソッドから例外がスローされると、b のすべてではないにしても一部のバイトが入力ストリームのデータで更新されています。
b - データの読み込み先のバッファ
EOFException - すべてのバイトを読み込む前に、このストリームの終わりに達した場合
IOException - 入出力エラーが発生した場合
void readFully(byte[] b,
int off,
int len)
throws IOException
len バイトを読み込みます。
このメソッドは、以下の条件の 1 つが発生するまでブロックします。
len バイトの入力データが読み込み可能。この場合、通常の値が返される
EOFException がスローされる
EOFException ではなく IOException がスローされる
b が null の場合、NullPointerException がスローされます。off が負の値の場合、len が負の値の場合、あるいは off+len が配列 b の長さよりも大きい場合、IndexOutOfBoundsException がスローされます。len がゼロの場合、読み込まれるバイトはありません。そうでない場合、読み込まれる最初のバイトは要素 b[off] に、次のバイトは要素 b[off+1] にと順次格納されていきます。読み込まれるバイト数は、最大でも len までです。
b - データの読み込み先のバッファoff - データへのオフセットを指定する intlen - 読み込むバイト数を指定する int
EOFException - すべてのバイトを読み込む前に、このストリームの終わりに達した場合
IOException - 入出力エラーが発生した場合
int skipBytes(int n)
throws IOException
n バイトをスキップするようにして、スキップしたバイトを破棄します。ただし、n より少ないバイト数 (ゼロの場合もある) しかスキップしない場合もあります。これは、いくつかの条件のうちの 1 つに該当した場合に発生します。n バイトをスキップする前にファイルの終わりに達してしまった場合もその 1 つです。このメソッドが EOFException をスローすることはありません。スキップされた実際のバイト数が返されます。
n - スキップするバイト数
IOException - 入出力エラーが発生した場合
boolean readBoolean()
throws IOException
true、そのバイトがゼロの場合は false を返します。このメソッドは、DataOutput インタフェースの writeBoolean メソッドが書き込むバイトを読み込むのに適しています。
boolean の値
EOFException - すべてのバイトを読み込む前に、このストリームの終わりに達した場合
IOException - 入出力エラーが発生した場合
byte readByte()
throws IOException
-128 〜 127 の範囲 (上下限値を含む) の符号付きの値として処理されます。このメソッドは、DataOutput インタフェースの writeByte メソッドによって書き込まれたバイトを読み込むのに適しています。
EOFException - すべてのバイトを読み込む前に、このストリームの終わりに達した場合
IOException - 入出力エラーが発生した場合
int readUnsignedByte()
throws IOException
int 型にゼロ拡張して結果を返します。このため、結果は 0 〜 255 の範囲内になります。DataOutput インタフェースの writeByte メソッドの引数がこの範囲内の値になるように意図されている場合、このメソッドは writeByte メソッドによって書き込まれたバイトを読み込むのに適しています。
EOFException - すべてのバイトを読み込む前に、このストリームの終わりに達した場合
IOException - 入出力エラーが発生した場合
short readShort()
throws IOException
short 値を返します。a を 1 番目のバイト、b を 2 番目のバイトとすると、戻り値は次のようになります。
(short)((a <<
8) | (b &
0xff))
このメソッドは、DataOutput インタフェースの writeShort メソッドによって書き込まれたバイトを読み込むのに適しています。
EOFException - すべてのバイトを読み込む前に、このストリームの終わりに達した場合
IOException - 入出力エラーが発生した場合
int readUnsignedShort()
throws IOException
0 〜 65535 の範囲の int 値を返します。a を 1 番目のバイト、b を 2 番目のバイトとすると、戻り値は次のようになります。
(((a &
0xff) <<
8) | (b &
0xff))
DataOutput インタフェースの writeShort メソッドの引数が 0 〜 65535 の範囲の値になるように意図されている場合、このメソッドは writeShort メソッドによって書き込まれたバイトを読み込むのに適しています。
EOFException - すべてのバイトを読み込む前に、このストリームの終わりに達した場合
IOException - 入出力エラーが発生した場合
char readChar()
throws IOException
char を読み込んで、char 値を返します。Unicode char は 2 バイトから構成されます。a を 1 番目のバイト、b を 2 番目のバイトとすると、戻り値は次のようになります。
(char)((a <<
8) | (b &
0xff))
このメソッドは、DataOutput インタフェースの writeChar メソッドによって書き込まれたバイトを読み込むのに適しています。
char の値
EOFException - すべてのバイトを読み込む前に、このストリームの終わりに達した場合
IOException - 入出力エラーが発生した場合
int readInt()
throws IOException
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 - 入出力エラーが発生した場合
long readLong()
throws IOException
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 - 入出力エラーが発生した場合
float readFloat()
throws IOException
float 値を返します。このためには、まず readInt メソッドとまったく同じ方法で int 値を作成し、次にこの int 値を Float.intBitsToFloat メソッドとまったく同じ方法で float に変換します。このメソッドは、DataOutput インタフェースの writeFloat メソッドによって書き込まれたバイトを読み込むのに適しています。
float の値
EOFException - すべてのバイトを読み込む前に、このストリームの終わりに達した場合
IOException - 入出力エラーが発生した場合
double readDouble()
throws IOException
double 値を返します。このためには、まず readlong メソッドとまったく同じ方法で long 値を作成し、次にこの long 値を Double.longBitsToDouble メソッドとまったく同じ方法で double に変換します。このメソッドは、DataOutput インタフェースの writeDouble メソッドによって書き込まれたバイトを読み込むのに適しています。
double の値
EOFException - すべてのバイトを読み込む前に、このストリームの終わりに達した場合
IOException - 入出力エラーが発生した場合
String readLine()
throws IOException
String として返されます。このメソッドはバイトを処理するものなので、Unicode 文字セットの入力を完全にはサポートしません。
ファイルの終わりが検出されるまでに 1 バイトも読み込めなかった場合には、null が返されます。そうでない場合、読み込まれた各バイトはゼロ拡張によって char 型に変換されます。文字 '\n' が検出されると、この文字は破棄され、読み込みは中止されます。文字 '\r' が検出されると、この文字は破棄され、その次のバイトが文字 '\n' に変換されますが、この文字も破棄されて、読み込みが中止されます。文字 '\n' と文字 '\r' のどちらかより前にファイルの終わりが検出されると、読み込みが中止されます。読み込みが中止されると、読み込まれて破棄されていないすべての文字を取り込んだ順番で格納している String が返されます。この文字列のそれぞれの文字は \u0100、つまり (char)256 より小さい値を持ちます。
null
IOException - 入出力エラーが発生した場合
String readUTF()
throws IOException
readUTF の汎用規約では、修正 UTF-8 形式でエンコードされた Unicode 文字列の表現を読み込みます。読み込まれた文字列は、String として返されます。
まず、2 バイトを読み込み、それを使って readUnsignedShort メソッドとまったく同じ方法で符号なし 16 ビット整数を作成します。この整数値は「UTF 長」と呼ばれ、読み込まれる追加のバイト数を表します。次に、このバイトがグループ単位で文字に変換されます。各グループの長さは、グループの先頭バイトの値から計算されます。グループに後続のバイトがあれば、それは次のグループの先頭バイトです。
グループの先頭バイトがビットパターンの 0xxxxxxx (ただし、x は 0 または 1 を意味する) に一致する場合、グループはそのバイトだけで構成されます。バイトはゼロ拡張されて単一の文字を表現します。
グループの先頭バイトがビットパターン 110xxxxx に一致する場合、そのグループはそのバイト a と 2 番目のバイト b から構成されます。バイト b が存在しない場合 (バイト a が読み込まれた最後のバイトだった場合) や、バイト b がビットパターン 10xxxxxx に一致しない場合には、UTFDataFormatException がスローされます。そうでない場合、グループは次の文字に変換されます。
(char)(((a&
0x1F) <<
6) | (b &
0x3F))
グループの先頭バイトがビットパターン 1110xxxx に一致する場合、そのグループは先頭バイト a に加えて、2 つのバイト b と c から構成されます。バイト 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 メソッドを使うと、このメソッドで読み込むのに適したデータを書き込むことができます。
EOFException - すべてのバイトを読み込む前に、このストリームの終わりに達した場合
IOException - 入出力エラーが発生した場合
UTFDataFormatException - 文字列中のバイトが、有効な修正 UTF-8 形式でエンコードされた文字列以外であった場合
|
JavaTM 2 Platform Standard Ed. 5.0 |
|||||||||
| 前のクラス 次のクラス | フレームあり フレームなし | |||||||||
| 概要: 入れ子 | フィールド | コンストラクタ | メソッド | 詳細: フィールド | コンストラクタ | メソッド | |||||||||
Copyright 2004 Sun Microsystems, Inc. All rights reserved. Use is subject to license terms. Documentation Redistribution Policy も参照してください。