ByteArrayInputStream
日本語 | バイト配列入力流れ |
英語 | byte array input stream |
ふりがな | ばいとあれいいんぷっとすとりーむ |
フリガナ | バイトアレイインプットストリーム |
J2SEに含まれるクラスのひとつ。パッケージも含めたクラス名はjava.io.ByteArrayInputStream。
ストリームクラス。InputStreamクラスのサブクラスであり、バイト入力ストリームクラスである。
バイト入力ストリームクラスの中では「入力元」に位置する。
対になる出力側のクラスはByteArrayOutputStreamクラスである。
byte型の配列を入力元とするクラス。
通常、バイト入力ストリームはファイルやソケットを入力元とするが、ByteArrayInputStreamクラスはbyte[]変数、つまりメモリを入力元とする。
ファイルやソケットは対象が存在しないとアクセスできないため、その代わりとして使用する。また、文字列等のメモリ上のデータを対象とする場合にも使用する。
ByteArrayInputStreamクラスのコンストラクタに入力元のbyte型配列を渡すことで、入力元を指定する。「入力元」、つまり「データ側の末端」であるため、InputStreamクラスを引数に持つコンストラクタはない。
ByteArrayInputStreamクラスのread()メソッドを用いて入力元のbyte型配列から各バイトを取得する。この時、入力元のbyte型配列を「整数値」としてではなく「バイトデータ」として処理する。つまり、整数値として「-1」(0xFF)が格納されていたとしても、read()メソッドは「255」(0x000000FF)を返す。これは「整数値」としての値ではなく「バイト」としての値を維持して返すためである。
処理終了後は、対象がbyte型配列のため、最後にclose()メソッドを呼ぶ必要はない。
また、各メソッドもIOException例外を投げない。
ストリームクラス。InputStreamクラスのサブクラスであり、バイト入力ストリームクラスである。
バイト入力ストリームクラスの中では「入力元」に位置する。
対になる出力側のクラスはByteArrayOutputStreamクラスである。
byte型の配列を入力元とするクラス。
通常、バイト入力ストリームはファイルやソケットを入力元とするが、ByteArrayInputStreamクラスはbyte[]変数、つまりメモリを入力元とする。
ファイルやソケットは対象が存在しないとアクセスできないため、その代わりとして使用する。また、文字列等のメモリ上のデータを対象とする場合にも使用する。
ByteArrayInputStreamクラスのコンストラクタに入力元のbyte型配列を渡すことで、入力元を指定する。「入力元」、つまり「データ側の末端」であるため、InputStreamクラスを引数に持つコンストラクタはない。
ByteArrayInputStreamクラスのread()メソッドを用いて入力元のbyte型配列から各バイトを取得する。この時、入力元のbyte型配列を「整数値」としてではなく「バイトデータ」として処理する。つまり、整数値として「-1」(0xFF)が格納されていたとしても、read()メソッドは「255」(0x000000FF)を返す。これは「整数値」としての値ではなく「バイト」としての値を維持して返すためである。
処理終了後は、対象がbyte型配列のため、最後にclose()メソッドを呼ぶ必要はない。
また、各メソッドもIOException例外を投げない。
使用例// Sample.java
import java.io.ByteArrayInputStream;
public class Sample
{
public static void main( String[] args )
{
// 処理対象のバイト配列。
byte[] bytes = new byte[]{ 1, 2, 3, -1 };
// そのバイト配列を読み込み対象とする
// ByteArrayInputStreamクラスを用意します。
ByteArrayInputStream byteArrayInputStream = new ByteArrayInputStream( bytes );
while( true )
{
// 1バイト取得します。
int i = byteArrayInputStream.read();
if( i == -1 )
{
// -1が返されてきたら終わりです。
break;
}
// 出力します。
System.out.println( "0x" + Integer.toHexString( i ) + " ( " + i + " )" );
}
// 0x1 ( 1 )
// 0x2 ( 2 )
// 0x3 ( 3 )
// 0xff ( 255 )
// このように、byte配列の各要素を取得します。
// また、各要素は「バイトデータ」としてみなして
// int型に変換して返されるため、このように-1(0xFF)は
// 255(0x000000FF)と、バイトデータを維持した形で
// 返されます。
// ByteArrayInputStreamクラスはclose()メソッドを
// 呼ぶ必要はありません。
}
}
import java.io.ByteArrayInputStream;
public class Sample
{
public static void main( String[] args )
{
// 処理対象のバイト配列。
byte[] bytes = new byte[]{ 1, 2, 3, -1 };
// そのバイト配列を読み込み対象とする
// ByteArrayInputStreamクラスを用意します。
ByteArrayInputStream byteArrayInputStream = new ByteArrayInputStream( bytes );
while( true )
{
// 1バイト取得します。
int i = byteArrayInputStream.read();
if( i == -1 )
{
// -1が返されてきたら終わりです。
break;
}
// 出力します。
System.out.println( "0x" + Integer.toHexString( i ) + " ( " + i + " )" );
}
// 0x1 ( 1 )
// 0x2 ( 2 )
// 0x3 ( 3 )
// 0xff ( 255 )
// このように、byte配列の各要素を取得します。
// また、各要素は「バイトデータ」としてみなして
// int型に変換して返されるため、このように-1(0xFF)は
// 255(0x000000FF)と、バイトデータを維持した形で
// 返されます。
// ByteArrayInputStreamクラスはclose()メソッドを
// 呼ぶ必要はありません。
}
}
使用例// Sample.java import java.io.ByteArrayInputStream; public class Sample { public static void main( String[] args ) { // 処理対象のバイト配列。 byte[] bytes = new byte[]{ 1, 2, 3, -1 }; // そのバイト配列を読み込み対象とする // ByteArrayInputStreamクラスを用意します。 ByteArrayInputStream byteArrayInputStream = new ByteArrayInputStream( bytes ); while( true ) { // 1バイト取得します。 int i = byteArrayInputStream.read(); if( i == -1 ) { // -1が返されてきたら終わりです。 break; } // 出力します。 System.out.println( "0x" + Integer.toHexString( i ) + " ( " + i + " )" ); } // 0x1 ( 1 ) // 0x2 ( 2 ) // 0x3 ( 3 ) // 0xff ( 255 ) // このように、byte配列の各要素を取得します。 // また、各要素は「バイトデータ」としてみなして // int型に変換して返されるため、このように-1(0xFF)は // 255(0x000000FF)と、バイトデータを維持した形で // 返されます。 // ByteArrayInputStreamクラスはclose()メソッドを // 呼ぶ必要はありません。 } }