public interface DataInput
DataInputインタフェースは、バイナリ・ストリームからバイトを読み込み、そこからJavaプリミティブ型のいずれかでデータを再構築するために提供されています。また、修正UTF-8形式のデータからStringを再作成する機能もあります。
必要なバイト数を読み込む前にend-of-fileに到達した場合、IOExceptionの一種であるEOFExceptionがスローされますが、このことはこのインタフェースのすべての読込みルーチンに当てはまります。end-of-file以外のなんらかの理由によりバイトを読み込むことができない場合、EOFException以外のIOExceptionがスローされます。特に、ストリームが閉じられた場合は、IOExceptionがスローされる可能性があります。
DataInputインタフェースとDataOutputインタフェースの実装は、UTF-8を若干修正した形式のUnicodeで文字列を表現します。(標準のUTF-8形式の詳細は、Unicode標準、Version 4.0のセクション3.9 Unicodeエンコード形式を参照。)次の表では、左端の列が最上位ビットです。
'\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()
2バイトの入力データを読み込んで、
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型にゼロ拡張して、結果を返します。結果はこのため、0 - 255の範囲内になります。 |
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 - データへのオフセットを指定するint。len - 読み込むバイト数を指定するint。EOFException - すべてのバイトを読み込む前に、このストリームの終わりに達した場合。IOException - 入出力エラーが発生した場合。int skipBytes(int n)
throws IOException
nバイトをスキップするようにして、スキップしたバイトを破棄します。ただし、一部の少数のバイト(0バイトも可能)をスキップできます。このスキップは複数の条件に起因する可能性がありますが、考えられる唯一の場合は、nバイトがスキップされる前にファイルの終わりに達した場合です。このメソッドは、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メソッドの引数が0から255の範囲内の値になるように意図されている場合、このメソッドは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値を返します。aを読み込まれた1番目のバイト、bを2番目のバイトとします。戻り値は次のようになります。
(char)((a << 8) | (b & 0xff))
このメソッドは、DataOutputインタフェースのwriteCharメソッドによって書き込まれたバイトを読み込むのに適しています。charの値。EOFException - すべてのバイトを読み込む前に、このストリームの終わりに達した場合。IOException - 入出力エラーが発生した場合。int readInt()
throws IOException
int値を返します。a-dを読み込まれる1から4番目のバイトとします。戻り値は次のようになります。
(((a & 0xff) << 24) | ((b & 0xff) << 16) |
((c & 0xff) << 8) | (d & 0xff))
このメソッドは、DataOutputインタフェースのwriteIntメソッドによって書き込まれたバイトを読み込むのに適しています。intの値。EOFException - すべてのバイトを読み込む前に、このストリームの終わりに達した場合。IOException - 入出力エラーが発生した場合。long readLong()
throws IOException
long値を返します。a-hを読み込まれる1から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形式でエンコードされた文字列以外であった場合。 バグまたは機能を送信
詳細なAPIリファレンスおよび開発者ドキュメントについては、Java SEのドキュメントを参照してください。そのドキュメントには、概念的な概要、用語の定義、回避方法、有効なコード例などの、開発者を対象にしたより詳細な説明が含まれています。
Copyright© 1993, 2014, Oracle and/or its affiliates. All rights reserved.