FilterInputStream
| 日本語 | 濾過膜入力流れ |
| 英語 | filter input stream |
| ふりがな | ふぃるたーいんぷっとすとりーむ |
| フリガナ | フィルターインプットストリーム |
J2SEに含まれるクラスのひとつ。パッケージも含めたクラス名はjava.io.FilterInputStream。
ストリームクラス。InputStreamクラスのサブクラスであり、バイト入力ストリームクラスである。
バイト入力ストリームクラスの中では「中継ぎ」に位置する。
対になる出力側のクラスはFilterOutputStreamクラスである。
バイト入力ストリームの「中継ぎ」クラスのスーパークラス。
「入力元」→「中継ぎ」→「取得用」という連携の中で、「入力元」から取得したバイトデータを書き換えたり、「取得用」からの取得指示に対して特殊な方法で取得する、といった「中間位置での立ち回り」を行うクラスの、スーパークラスとなるクラスである。
そういったスーパークラスとしての役目だけ持つため、このクラスのみを単独で使用することはない。このクラスのサブクラスを使用するか、もしくはサブクラスを作成して使用する。
サブクラスにはBufferedInputStreamクラス、DataInputStreamクラス、PushbackInputStreamクラス等のクラスがある。
FilterInputStreamクラスのサブクラスを作成する場合、まずコンストラクタでInputStreamクラスを引数に受け取り、FilterInputStreamクラスのコンストラクタに渡す。そうすることで、FilterInputStreamクラスのinフィールドにこのInputStreamクラスが格納される。このInputStreamクラスは「入力元」に当たる。
その後、任意の(可能なら全ての)read()メソッドをオーバーロードする。基本的には、inフィールドのread()メソッドを呼び出して「入力元」からバイトストリームを取得し、そのまま返す。ただし、このサブクラスで行いたい機能によっては、この取得したバイトストリームを加工したり、別のバイトストリームから値を返すようにする。。
read()メソッドは、このサブクラスを他の「中継ぎ」クラスもしくは「取得用」クラスに渡した場合、そのread()メソッドから呼び出される。
つまり、「取得用」→「中継ぎ」→「入力元」の順でread()メソッドを呼び出していき、その逆方向に値を返していく。
ストリームクラス。InputStreamクラスのサブクラスであり、バイト入力ストリームクラスである。
バイト入力ストリームクラスの中では「中継ぎ」に位置する。
対になる出力側のクラスはFilterOutputStreamクラスである。
バイト入力ストリームの「中継ぎ」クラスのスーパークラス。
「入力元」→「中継ぎ」→「取得用」という連携の中で、「入力元」から取得したバイトデータを書き換えたり、「取得用」からの取得指示に対して特殊な方法で取得する、といった「中間位置での立ち回り」を行うクラスの、スーパークラスとなるクラスである。
そういったスーパークラスとしての役目だけ持つため、このクラスのみを単独で使用することはない。このクラスのサブクラスを使用するか、もしくはサブクラスを作成して使用する。
サブクラスにはBufferedInputStreamクラス、DataInputStreamクラス、PushbackInputStreamクラス等のクラスがある。
FilterInputStreamクラスのサブクラスを作成する場合、まずコンストラクタでInputStreamクラスを引数に受け取り、FilterInputStreamクラスのコンストラクタに渡す。そうすることで、FilterInputStreamクラスのinフィールドにこのInputStreamクラスが格納される。このInputStreamクラスは「入力元」に当たる。
その後、任意の(可能なら全ての)read()メソッドをオーバーロードする。基本的には、inフィールドのread()メソッドを呼び出して「入力元」からバイトストリームを取得し、そのまま返す。ただし、このサブクラスで行いたい機能によっては、この取得したバイトストリームを加工したり、別のバイトストリームから値を返すようにする。。
read()メソッドは、このサブクラスを他の「中継ぎ」クラスもしくは「取得用」クラスに渡した場合、そのread()メソッドから呼び出される。
つまり、「取得用」→「中継ぎ」→「入力元」の順でread()メソッドを呼び出していき、その逆方向に値を返していく。
参考サイト
// Sample.java
import java.io.InputStream;
import java.io.ByteArrayInputStream;
import java.io.PushbackInputStream;
import java.io.FilterInputStream;
import java.io.IOException;
public class Sample
{
public static void main( String[] args )
{
ByteArrayInputStream byteArrayInputStream = null;
NormalFilterInputStream normalFilterInputStream = null;
PushbackInputStream pushbackInputStream = null;
try
{
// 処理対象のバイト配列1。
byte[] bytes = new byte[]{ 1, 2, 3 };
// そのバイト配列を読み込み対象とする
// ByteArrayInputStreamクラス。
byteArrayInputStream = new ByteArrayInputStream( bytes );
// このクラスを対象とするNormalFilterInputStreamクラスを用意します。
normalFilterInputStream = new NormalFilterInputStream( byteArrayInputStream );
// このクラスを対象とするPushbackInputStreamクラスを用意します。
pushbackInputStream = new PushbackInputStream( normalFilterInputStream );
// つまり、
// ByteArrayInputStream
// ↓
// NormalFilterInputStream
// ↓
// PushbackInputStream
// という形で、バイト入力ストリームクラスが連結したことになります。
while( true )
{
// 1バイト取得します。
int i = pushbackInputStream.read();
if( i == -1 )
{
// -1が返されてきたら終わりです。
break;
}
// 出力します。
System.out.println( "0x" + Integer.toHexString( i ) + " ( " + i + " )" );
}
// NormalFilterInputStream#read() : 1
// 0x1 ( 1 )
// NormalFilterInputStream#read() : 2
// 0x2 ( 2 )
// NormalFilterInputStream#read() : 3
// 0x3 ( 3 )
// NormalFilterInputStream#read() : -1
// このように、pushbackInputStreamのread()メソッドを呼ぶと、
// normalFilterInputStreamのread()メソッドを呼び出します。
// つまりバイト入力ストリームが連結して「チェーン」になった
// というわけです。
}
catch( IOException e )
{
// 読み込みに失敗した際に、read()メソッドが
// IOException例外を投げます。
e.printStackTrace();
}
finally
{
// 処理が終わったら、最後にclose()メソッドを呼んで
// 後処理をします。また、これは必ず行うため、
// finally内で行います。
try
{
if( pushbackInputStream != null )
{
pushbackInputStream.close();
}
}
catch( IOException e )
{
// close()メソッドはIOExceptionがthrows指定されているので
// 一応受け取ります。
e.printStackTrace();
}
// 処理が終わったら、最後にclose()メソッドを呼んで
// 後処理をします。また、これは必ず行うため、
// finally内で行います。
try
{
if( normalFilterInputStream != null )
{
normalFilterInputStream.close();
}
}
catch( IOException e )
{
// close()メソッドはIOExceptionがthrows指定されているので
// 一応受け取ります。
e.printStackTrace();
}
// 処理が終わったら、最後にclose()メソッドを呼んで
// 後処理をします。また、これは必ず行うため、
// finally内で行います。
try
{
if( byteArrayInputStream != null )
{
byteArrayInputStream.close();
}
}
catch( IOException e )
{
// close()メソッドはIOExceptionがthrows指定されているので
// 一応受け取ります。
e.printStackTrace();
}
}
}
}
/**
* NormalFilterInputStreamクラス。
* FilterInputStreamクラスのサブクラスです。
*/
class NormalFilterInputStream extends FilterInputStream
{
/**
* コンストラクタ。
* 引数に「入力元」となるバイト入力ストリームクラスを受け取ります。
* 「中継ぎ」に当たるので、InputStreamクラスを引数に受け取ります。
*/
public NormalFilterInputStream( InputStream in )
{
// 処理はスーパークラスが受け持ってくれるので、
// スーパークラスに渡します。
super( in );
}
/**
* read()メソッド。
* このクラスを利用するバイト入力ストリームクラスの
* read()メソッドから呼び出されます。
*/
public int read() throws IOException
{
// スーパークラスであるFilterInputStreamクラスの
// inフィールドに「入力元」のInputStreamクラスが
// 入っているので、そのread()メソッドを呼び出します。
int i = in.read();
System.out.println( "NormalFilterInputStream#read() : " + i );
return i;
}
}
import java.io.InputStream;
import java.io.ByteArrayInputStream;
import java.io.PushbackInputStream;
import java.io.FilterInputStream;
import java.io.IOException;
public class Sample
{
public static void main( String[] args )
{
ByteArrayInputStream byteArrayInputStream = null;
NormalFilterInputStream normalFilterInputStream = null;
PushbackInputStream pushbackInputStream = null;
try
{
// 処理対象のバイト配列1。
byte[] bytes = new byte[]{ 1, 2, 3 };
// そのバイト配列を読み込み対象とする
// ByteArrayInputStreamクラス。
byteArrayInputStream = new ByteArrayInputStream( bytes );
// このクラスを対象とするNormalFilterInputStreamクラスを用意します。
normalFilterInputStream = new NormalFilterInputStream( byteArrayInputStream );
// このクラスを対象とするPushbackInputStreamクラスを用意します。
pushbackInputStream = new PushbackInputStream( normalFilterInputStream );
// つまり、
// ByteArrayInputStream
// ↓
// NormalFilterInputStream
// ↓
// PushbackInputStream
// という形で、バイト入力ストリームクラスが連結したことになります。
while( true )
{
// 1バイト取得します。
int i = pushbackInputStream.read();
if( i == -1 )
{
// -1が返されてきたら終わりです。
break;
}
// 出力します。
System.out.println( "0x" + Integer.toHexString( i ) + " ( " + i + " )" );
}
// NormalFilterInputStream#read() : 1
// 0x1 ( 1 )
// NormalFilterInputStream#read() : 2
// 0x2 ( 2 )
// NormalFilterInputStream#read() : 3
// 0x3 ( 3 )
// NormalFilterInputStream#read() : -1
// このように、pushbackInputStreamのread()メソッドを呼ぶと、
// normalFilterInputStreamのread()メソッドを呼び出します。
// つまりバイト入力ストリームが連結して「チェーン」になった
// というわけです。
}
catch( IOException e )
{
// 読み込みに失敗した際に、read()メソッドが
// IOException例外を投げます。
e.printStackTrace();
}
finally
{
// 処理が終わったら、最後にclose()メソッドを呼んで
// 後処理をします。また、これは必ず行うため、
// finally内で行います。
try
{
if( pushbackInputStream != null )
{
pushbackInputStream.close();
}
}
catch( IOException e )
{
// close()メソッドはIOExceptionがthrows指定されているので
// 一応受け取ります。
e.printStackTrace();
}
// 処理が終わったら、最後にclose()メソッドを呼んで
// 後処理をします。また、これは必ず行うため、
// finally内で行います。
try
{
if( normalFilterInputStream != null )
{
normalFilterInputStream.close();
}
}
catch( IOException e )
{
// close()メソッドはIOExceptionがthrows指定されているので
// 一応受け取ります。
e.printStackTrace();
}
// 処理が終わったら、最後にclose()メソッドを呼んで
// 後処理をします。また、これは必ず行うため、
// finally内で行います。
try
{
if( byteArrayInputStream != null )
{
byteArrayInputStream.close();
}
}
catch( IOException e )
{
// close()メソッドはIOExceptionがthrows指定されているので
// 一応受け取ります。
e.printStackTrace();
}
}
}
}
/**
* NormalFilterInputStreamクラス。
* FilterInputStreamクラスのサブクラスです。
*/
class NormalFilterInputStream extends FilterInputStream
{
/**
* コンストラクタ。
* 引数に「入力元」となるバイト入力ストリームクラスを受け取ります。
* 「中継ぎ」に当たるので、InputStreamクラスを引数に受け取ります。
*/
public NormalFilterInputStream( InputStream in )
{
// 処理はスーパークラスが受け持ってくれるので、
// スーパークラスに渡します。
super( in );
}
/**
* read()メソッド。
* このクラスを利用するバイト入力ストリームクラスの
* read()メソッドから呼び出されます。
*/
public int read() throws IOException
{
// スーパークラスであるFilterInputStreamクラスの
// inフィールドに「入力元」のInputStreamクラスが
// 入っているので、そのread()メソッドを呼び出します。
int i = in.read();
System.out.println( "NormalFilterInputStream#read() : " + i );
return i;
}
}
// Sample.java
import java.io.InputStream;
import java.io.ByteArrayInputStream;
import java.io.PushbackInputStream;
import java.io.FilterInputStream;
import java.io.IOException;
public class Sample
{
public static void main( String[] args )
{
ByteArrayInputStream byteArrayInputStream = null;
NormalFilterInputStream normalFilterInputStream = null;
PushbackInputStream pushbackInputStream = null;
try
{
// 処理対象のバイト配列1。
byte[] bytes = new byte[]{ 1, 2, 3 };
// そのバイト配列を読み込み対象とする
// ByteArrayInputStreamクラス。
byteArrayInputStream = new ByteArrayInputStream( bytes );
// このクラスを対象とするNormalFilterInputStreamクラスを用意します。
normalFilterInputStream = new NormalFilterInputStream( byteArrayInputStream );
// このクラスを対象とするPushbackInputStreamクラスを用意します。
pushbackInputStream = new PushbackInputStream( normalFilterInputStream );
// つまり、
// ByteArrayInputStream
// ↓
// NormalFilterInputStream
// ↓
// PushbackInputStream
// という形で、バイト入力ストリームクラスが連結したことになります。
while( true )
{
// 1バイト取得します。
int i = pushbackInputStream.read();
if( i == -1 )
{
// -1が返されてきたら終わりです。
break;
}
// 出力します。
System.out.println( "0x" + Integer.toHexString( i ) + " ( " + i + " )" );
}
// NormalFilterInputStream#read() : 1
// 0x1 ( 1 )
// NormalFilterInputStream#read() : 2
// 0x2 ( 2 )
// NormalFilterInputStream#read() : 3
// 0x3 ( 3 )
// NormalFilterInputStream#read() : -1
// このように、pushbackInputStreamのread()メソッドを呼ぶと、
// normalFilterInputStreamのread()メソッドを呼び出します。
// つまりバイト入力ストリームが連結して「チェーン」になった
// というわけです。
}
catch( IOException e )
{
// 読み込みに失敗した際に、read()メソッドが
// IOException例外を投げます。
e.printStackTrace();
}
finally
{
// 処理が終わったら、最後にclose()メソッドを呼んで
// 後処理をします。また、これは必ず行うため、
// finally内で行います。
try
{
if( pushbackInputStream != null )
{
pushbackInputStream.close();
}
}
catch( IOException e )
{
// close()メソッドはIOExceptionがthrows指定されているので
// 一応受け取ります。
e.printStackTrace();
}
// 処理が終わったら、最後にclose()メソッドを呼んで
// 後処理をします。また、これは必ず行うため、
// finally内で行います。
try
{
if( normalFilterInputStream != null )
{
normalFilterInputStream.close();
}
}
catch( IOException e )
{
// close()メソッドはIOExceptionがthrows指定されているので
// 一応受け取ります。
e.printStackTrace();
}
// 処理が終わったら、最後にclose()メソッドを呼んで
// 後処理をします。また、これは必ず行うため、
// finally内で行います。
try
{
if( byteArrayInputStream != null )
{
byteArrayInputStream.close();
}
}
catch( IOException e )
{
// close()メソッドはIOExceptionがthrows指定されているので
// 一応受け取ります。
e.printStackTrace();
}
}
}
}
/**
* NormalFilterInputStreamクラス。
* FilterInputStreamクラスのサブクラスです。
*/
class NormalFilterInputStream extends FilterInputStream
{
/**
* コンストラクタ。
* 引数に「入力元」となるバイト入力ストリームクラスを受け取ります。
* 「中継ぎ」に当たるので、InputStreamクラスを引数に受け取ります。
*/
public NormalFilterInputStream( InputStream in )
{
// 処理はスーパークラスが受け持ってくれるので、
// スーパークラスに渡します。
super( in );
}
/**
* read()メソッド。
* このクラスを利用するバイト入力ストリームクラスの
* read()メソッドから呼び出されます。
*/
public int read() throws IOException
{
// スーパークラスであるFilterInputStreamクラスの
// inフィールドに「入力元」のInputStreamクラスが
// 入っているので、そのread()メソッドを呼び出します。
int i = in.read();
System.out.println( "NormalFilterInputStream#read() : " + i );
return i;
}
}




