nanoJBlend

java.io
インタフェース DataInput

既知の実装クラスの一覧:
DataInputStream

public interface DataInput

DataInput インタフェースはバイナリデータストリームからバイトデータを読み込み基本データ型のデータとして復元する機能を定義します。 また、「Modified UTF-8」形式のデータから String を復元する機能も定義します。

このインタフェースのメソッドでは、意図している長さのデータを読み込む前にストリームの終端に到達すると EOFException がスローされます。 ストリーム終端以外の理由でバイトデータを読み込めない場合は IOException がスローされます。 特に、既にストリームがクローズされている場合には IOException がスローされる可能性があります。

Modified UTF-8

DataInput インタフェースと DataOutput インタフェースの実装ではUnicode文字列を UTF-8 とは少し異なる形式で扱います。この形式を「Modified UTF-8」と呼びます。 Modified UTF-8 での文字エンコーディングの方法を以下に説明します。 以降の表では最上位ビットは左端に記載されています。

'\u0001' から '\u007F' までの文字は単一バイト値で表されます。

Bit値
バイト1
0
ビット6-0
null 文字 '\u0000'、および '\u0080' から '\u07FF' までの文字は2バイトで表現されます。
Bit値
バイト1
1
1
0
ビット10-6
バイト2
1
0
ビット5-0
'\u0800' から '\uFFFF' までの文字は3バイトで表現されます。
Bit値
バイト1
1
1
1
0
ビット15-12
バイト2
1
0
ビット11-6
バイト3
1
0
ビット5-0

注意:


メソッドの概要
 boolean readBoolean()
          1バイトを読み込み、値に基づいた boolean 値を返します。
 byte readByte()
          1バイト読み込んで返します。
 char readChar()
          2バイトを char 値として読み込みます。
 void readFully(byte[] b)
          b.length バイトを入力ストリームから読み込み、 b に格納します。
 void readFully(byte[] b, int off, int len)
          入力ストリームから len バイト読み込みます。
 int readInt()
          4バイトを int 値として読み込みます。
 long readLong()
          8バイトを long 値として読み込みます。
 short readShort()
          2バイトを short 値として読み込みます。
 int readUnsignedByte()
          1バイトを符号無し整数として読み込み、 int に格納して返します。
 int readUnsignedShort()
          2バイトを符号無し整数として読み込み、 int に格納して返します。
 String readUTF()
          Modified UTF-8 でエンコードされた文字列を読み込み、 String に格納して返します。
 int skipBytes(int n)
          入力ストリームから n バイトスキップして廃棄します。
 

メソッドの詳細

readFully

void readFully(byte[] b)
               throws IOException
b.length バイトを入力ストリームから読み込み、 b に格納します。 このメソッドは次のどれかの事象が起きるまでブロックします。

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

パラメータ:
b - このメソッドが読み込んだデータを格納するバッファ
例外:
EOFException - b.length バイトを読み込む前にストリームの終端に到達した場合
IOException - I/Oエラーが発生した場合

readFully

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

このメソッドは次のどれかの条件が成立するまでブロックします。

bnull の場合、 NullPointerException がスローされます。 off が負値の場合、 len が負値の場合、または off+len が配列 b の長さより大きい場合、 IndexOutOfBoundsException がスローされます。 len が零の場合、データは読み込まれません。 これら以外の場合、読み込まれた最初のバイトは b[off]、次は b[off+1] と順に格納されます。 データは最大で len バイトまで読み込まれます。

パラメータ:
b - データを読み込むバッファ
off - 最初のバイトをバッファに格納する配列要素のインデックス
len - 読み込むデータのバイト長
例外:
EOFException - 指定されたデータを全て読み込む前にストリームの終端に到達した場合
IOException - I/Oエラーが発生した場合

skipBytes

int skipBytes(int n)
              throws IOException
入力ストリームから n バイトスキップして廃棄します。 指定したより少ないバイト数(場合によっては 0 バイト)しかスキップしない場合があり得ます。 たとえば n バイトをスキップする前にストリームの終端に到達する場合などです。

このメソッドは EOFException をスローしません。

このメソッドは実際にスキップしたバイト数を返します。

パラメータ:
n - スキップするバイト数
戻り値:
実際にスキップしたバイト数
例外:
IOException - I/Oエラーが発生した場合

readByte

byte readByte()
              throws IOException
1バイト読み込んで返します。 読み込んだバイトは符号付き1バイト整数(-128から127までの整数)として扱われます。 このメソッドは DataOutput インタフェースの writeByte メソッドで書き込んだバイトデータを読み込むのに適しています。

戻り値:
読み込んだ1バイト値
例外:
EOFException - データを読み込む前にストリームの終端に到達した場合
IOException - I/Oエラーが発生した場合

readBoolean

boolean readBoolean()
                    throws IOException
1バイトを読み込み、値に基づいた boolean 値を返します。 読み込んだバイトが非零の場合 true、零の場合 false を返します。 このメソッドは DataOutput インタフェースの writeBoolean メソッドで書き込んだバイトデータを読み込むのに適しています。

戻り値:
読み込んだ boolean
例外:
EOFException - データを読み込む前にストリームの終端に到達した場合
IOException - I/Oエラーが発生した場合

readUnsignedByte

int readUnsignedByte()
                     throws IOException
1バイトを符号無し整数として読み込み、 int に格納して返します。 このメソッドは DataOutput インタフェースの writeByte メソッドで書き込んだ byte 値を 0 から 255 までの符号無し整数として読み込むのに適しています。

戻り値:
読み込んだ符号無し8ビット整数の値を保持する int
例外:
EOFException - データを読み込む前にストリームの終端に到達した場合
IOException - I/Oエラーが発生した場合

readShort

short readShort()
                throws IOException
2バイトを short 値として読み込みます。 a を最初のバイト、 b を2番目のバイトとすると、このメソッドは (short)((a << 8)|(b & 0xff)) を返します。 このメソッドは DataOutput インタフェースの writeShort メソッドで書き込んだ整数データを読み込むのに適しています。

戻り値:
読み込んだ16ビット値
例外:
EOFException - データを読み込む前にストリームの終端に到達した場合
IOException - I/Oエラーが発生した場合

readUnsignedShort

int readUnsignedShort()
                      throws IOException
2バイトを符号無し整数として読み込み、 int に格納して返します。 a を最初のバイト、b を2番目のバイトとすると、このメソッドは (((a & 0xff) << 8)|(b & 0xff)) を返します。 このメソッドは DataOutput インタフェースの writeShort メソッドで書き込んだ short 値を 0 から 65535 までの符号無し整数として読み込むのに適しています。

戻り値:
読み込んだ符号無し16ビット値
例外:
EOFException - データを読み込む前にストリームの終端に到達した場合
IOException - I/Oエラーが発生した場合

readChar

char readChar()
              throws IOException
2バイトを char 値として読み込みます。 a を最初のバイト、 b を2番目のバイトとすると、このメソッドは (char)((a << 8)|(b & 0xff)) を返します。 このメソッドは DataOutput インタフェースの writeChar メソッドで書き込んだバイトデータを読み込むのに適しています。

戻り値:
読み込んだ char
例外:
EOFException - データを読み込む前にストリームの終端に到達した場合
IOException - I/Oエラーが発生した場合

readInt

int readInt()
            throws IOException
4バイトを int 値として読み込みます。 バイト b0b1b2b3 の4バイトをこの順に読み込んだとすると、このメソッドは、

(((b0 & 0xff) << 24) |
 ((b1 & 0xff) << 16) |
 ((b2 & 0xff) << 8)  |
  (b3 & 0xff))


を返します。 このメソッドは DataOutput インタフェースの writeInt メソッドで書き込んだ整数データを読み込むのに適しています。

戻り値:
読み込んだ int
例外:
EOFException - データを読み込む前にストリームの終端に到達した場合
IOException - I/Oエラーが発生した場合

readLong

long readLong()
              throws IOException
8バイトを long 値として読み込みます。 バイト b0b1b2 、... b7 の8バイトをこの順に読み込んだとすると、このメソッドは、

(((b0 & 0xff) << 56) |
 ((b1 & 0xff) << 48) |
 ((b2 & 0xff) << 40) |
 ((b3 & 0xff) << 32) |
 ((b4 & 0xff) << 24) |
 ((b5 & 0xff) << 16) |
 ((b6 & 0xff) << 8)  |
  (b7 & 0xff))


を返します。 このメソッドは DataOutput インタフェースの writeLong メソッドで書き込んだ整数データを読み込むのに適しています。

戻り値:
読み込んだlong値
例外:
EOFException - データを読み込む前にストリームの終端に到達した場合
IOException - I/Oエラーが発生した場合

readUTF

String readUTF()
               throws IOException
Modified UTF-8 でエンコードされた文字列を読み込み、 String に格納して返します。

このメソッドは readUnsignedShort メソッドと同様に最初の2バイトを符号無し2バイト整数として読み込み、続く文字データブロックのバイト長であるとみなします。 文字データブロックは連続する複数のグループで構成されます。 各グループの最初のバイトからそのグループのバイト長が決定されます。

グループの最初のバイトの最上位ビット(ビット7)が 0 の場合、そのグループは最初のバイトだけから構成されます。 このバイトの上位バイトを0拡張した値が1文字を表します。

グループの最初のバイト a の上位3ビット(ビット7-5)が「 110 」であり、2番目のバイト b の上位2ビット(ビット7-6)が「 10 」である場合、このグループは ab の2バイトで構成されます。 このグループは次の文字に変換されます。

(char)(((a & 0x1f) << 6) | (b & 0x3f))

2番目のバイト b が文字データブロックに存在しない、または存在するが上位2ビット(ビット7-6)が「 10 」ではない場合、 UTFDataFormatException がスローされます。

グループの最初のバイト a の上位4ビット(ビット7-4)が「 1110 」であり、2番目のバイト b および3番目のバイト c の上位2ビット(ビット7-6)が「 10 」である場合、このグループは abc の3バイトで構成されます。 このグループは次の文字に変換されます。

(char)(((a & 0x0F) << 12) | ((b & 0x3F) << 6) | (c & 0x3F))

バイト bc が文字データブロックに存在しない、または存在するが上位2ビット(ビット7-6)が「 10 」ではない場合、 UTFDataFormatException がスローされます。

グループの最初のバイト a の上位4ビット(ビット7-4)が「 1111 」である、または上位2ビット(ビット7-6)が「 10 」である場合、 UTFDataFormatException がスローされます。

以上の処理中にストリームの終端に到達した場合、 EOFException がスローされます。

以上の処理で文字データブロックに存在する全てのブロックが正常に変換できたら、このメソッドはブロックの順に変換して得られる文字列を String に設定して返します。

このメソッドは DataOutput インタフェースの writeUTF メソッドで書き込んだ文字列を読み込むのに適しています。

戻り値:
読み込んだUnicode文字列を格納した String
例外:
EOFException - データを読み込む前にストリームの終端に到達した場合
IOException - I/Oエラーが発生した場合
UTFDataFormatException - 読み込んだバイト列が有効な Modified UTF-8 文字列ではない場合

nanoJBlend

Copyright 2005-2013 Aplix and/or its affiliates. All rights reserved. Aplix Confidential and Restricted.
NTT DOCOMO and Hitachi Kokusai Electric Confidential