|
JavaTM Platform Standard Ed. 6 |
|||||||||
前のクラス 次のクラス | フレームあり フレームなし | |||||||||
概要: 入れ子 | フィールド | コンストラクタ | メソッド | 詳細: フィールド | コンストラクタ | メソッド |
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 形式の詳細は、『The Unicode Standard, Version 4.0』の「3.9 Unicode Encoding Forms」を参照)。次の表では、左端の列が最上位ビットです。
ビット値 バイト 1
0 bits 6-0
ビット値 バイト 1
1 1 0 bits 10-6 バイト 2
1 0 bits 5-0
'\u0800'
〜 '\uFFFF'
の範囲の char
値は 3 個のバイトで表現されます。
ビット値 バイト 1
1 1 1 0 bits 15-12 バイト 2
1 0 bits 11-6 バイト 3
1 0 bits 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 型にゼロ拡張して結果を返します。 |
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
バイトをスキップするようにして、スキップしたバイトを破棄します。ただし、一部の少数のバイト (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
メソッドの引数がこの範囲内の値になるように意図されている場合、このメソッドは 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
が返されます。
EOFException
- すべてのバイトを読み込む前に、このストリームの終わりに達した場合
IOException
- 入出力エラーが発生した場合
UTFDataFormatException
- 文字列中のバイトが、有効な修正 UTF-8 形式でエンコードされた文字列以外であった場合
|
JavaTM Platform Standard Ed. 6 |
|||||||||
前のクラス 次のクラス | フレームあり フレームなし | |||||||||
概要: 入れ子 | フィールド | コンストラクタ | メソッド | 詳細: フィールド | コンストラクタ | メソッド |
Copyright 2009 Sun Microsystems, Inc. All rights reserved. Use is subject to license terms. Documentation Redistribution Policy も参照してください。