モジュール java.base
パッケージ 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フォーマットに関する情報は、「Unicode標準、バージョン4.0」のセクション「3.9 Unicodeエンコーディング・フォーム」を参照してください。)

  • '\u0001''\u007F'の範囲の文字は、1バイトで表されます。
  • ヌル文字'\u0000''\u0080''\u07FF'の範囲の文字は、1対のバイトで表されます。
  • '\u0800''\uFFFF'の範囲の文字は3バイトで表されます。
UTF-8値のエンコーディング
Byte ビット値
7 6 5 4 3 2 1 0
\u0001から\u007F 1 0 ビット6-0
\u0000,
\u0080\u07FF
1 1 1 0 ビット10-6
2 1 0 ビット5-0
\u0800から\uFFFF 1 1 1 1 0 ビット15-12
2 1 0 ビット11-6
3 1 0 ビット5-0

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

  • nullバイト'\u0000'は1バイトではなく、2バイト形式にコード化されます。これにより、コード化された文字列がその中に埋め込まれたnullを持つことはありません。
  • 1バイト、2バイト、および3バイト形式だけを使います。
  • 補助文字は、サロゲート・ペアの形式で表されます。

導入されたバージョン:
1.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型にゼロ拡張して、結果を返します。結果はこのため、0 - 255の範囲内になります。
    int readUnsignedShort()
    2バイトの入力データを読み込んで、0 - 65535の範囲のint値を返します。
    String readUTF()
    修正UTF-8形式でエンコードされた文字列を読み込みます。
    int skipBytes​(int n)
    入力ストリームからnバイトをスキップするようにして、スキップしたバイトを破棄します。
  • メソッドの詳細

    • readFully

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

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

      • b.lengthバイトの入力データが読込み可能。この場合、通常の値が返される。
      • ファイルの終わりが検出された。この場合は、EOFExceptionがスローされる。
      • 入出力エラーが発生した。この場合は、EOFExceptionではなくIOExceptionがスローされる。

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

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

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

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

      • lenバイトの入力データが読込み可能。この場合、通常の値が返される。
      • ファイルの終わりが検出された。この場合は、EOFExceptionがスローされる。
      • 入出力エラーが発生した。この場合は、EOFExceptionではなくIOExceptionがスローされる。

      bnullの場合、NullPointerExceptionがスローされます。 offが負の場合、lenが負の場合、またはoff+lenが配列bの長さよりも大きい場合は、IndexOutOfBoundsExceptionがスローされます。 lenがゼロの場合、読み込まれるバイトはありません。 それ以外の場合、最初に読み込まれたバイトは要素b[off]に格納され、次のバイトはb[off+1]に格納され、それ以降も同様に続きます。 読み込まれるバイト数の上限はlenと同じです。

      パラメータ:
      b - データの読込み先のバッファ。
      off - データ配列bのオフセットを指定するint値。
      len - 読み込むバイト数を指定するint。
      例外:
      NullPointerException - bnullである場合。
      IndexOutOfBoundsException - offが負の値の場合、lenが負の値の場合、またはlenb.length - offより大きい場合
      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バイトの入力データを読み込んで返します。 読込み対象バイトは-128から127の範囲(上下限値を含む)の符号付きの値として処理されます。 このメソッドは、DataOutputインタフェースのwriteByteメソッドによって書き込まれたバイトを読み込むのに適しています。
      戻り値:
      読み込まれた8ビットの値。
      例外:
      EOFException - すべてのバイトを読み込む前に、このストリームの終わりに達した場合。
      IOException - 入出力エラーが発生した場合。
    • readUnsignedByte

      int readUnsignedByte() throws IOException
      1バイトの入力データを読み込み、int型にゼロ拡張して、結果を返します。結果はこのため、0 - 255の範囲内になります。 DataOutputインタフェースのwriteByteメソッドの引数が0から255の範囲内の値になるように意図されている場合、このメソッドは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バイトの入力データを読み込んで、0 - 65535の範囲のint値を返します。 aを読み込まれた1番目のバイト、bを2番目のバイトとします。 戻り値は次のようになります。
      (((a & 0xff) << 8) | (b & 0xff))
       
      DataOutputインタフェースのwriteShortメソッドの引数が0から65535の範囲内の値になるように意図されている場合、このメソッドは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が返されます。

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

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