JavaTM Platform
Standard Ed. 6

java.io
インタフェース DataInput

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

public interface DataInput

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

必要なバイト数を読み込む前に end-of-file に到達した場合、IOException の一種である EOFException がスローされますが、このことはこのインタフェースのすべての読み込みルーチンに当てはまります。end-of-file 以外のなんらかの理由によりバイトを読み込むことができない場合、EOFException 以外の IOException がスローされます。特に、ストリームが閉じられた場合は、IOException がスローされる可能性があります。

修正 UTF-8

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 形式とこの形式とは、次の点で異なります。

導入されたバージョン:
JDK1.0
関連項目:
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 バイトの入力データを読み込んで、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 バイトをスキップするようにして、スキップしたバイトを破棄します。ただし、一部の少数のバイト (0 バイトも可能) をスキップできます。このスキップは複数の条件に起因する可能性がありますが、考えられる唯一の場合は、n バイトがスキップされる前にファイルの終わりに達した場合です。このメソッドは、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
2 バイトの入力データを読み込んで、char 値を返します。a を 1 番目のバイト、b を 2 番目のバイトとすると、戻り値は次のようになります。 

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

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

readInt

int readInt()
            throws IOException
4 バイトの入力データを読み込んで、int 値を返します。a 〜 d を読み込まれる 1 〜 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 〜 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 - 入出力エラーが発生した場合

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 が返されます。

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

JavaTM Platform
Standard Ed. 6

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

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