FilterOutputStream
| 日本語 | 濾過膜出力流れ |
| 英語 | filter output stream |
| ふりがな | ふぃるたーあうとぷっとすとりーむ |
| フリガナ | フィルターアウトプットストリーム |
J2SEに含まれるクラスのひとつ。パッケージも含めたクラス名はjava.io.FilterOutputStream。
ストリームクラス。OutputStreamクラスのサブクラスであり、バイト出力ストリームクラスである。
バイト出力ストリームクラスの中では「中継ぎ」に位置する。
対になる入力側のクラスはDataInputStreamクラスである。
バイト出力ストリームの「中継ぎ」クラスのスーパークラス。
「出力用」→「中継ぎ」→「出力先」という連携の中で、「出力用」に渡したバイトデータを書き換えたりといった「中間位置での立ち回り」を行うクラスの、スーパークラスとなるクラスである。
そういったスーパークラスとしての役目だけ持つため、このクラスのみを単独で使用することはない。このクラスのサブクラスを使用するか、もしくはサブクラスを作成して使用する。
サブクラスにはBufferedOutputStreamクラス、DataOutputStreamクラス、PrintStreamクラス等のクラスがある。
FilterOutputStreamクラスのサブクラスを作成する場合、まずコンストラクタでOutputStreamクラスを引数に受け取り、FilterOutputStreamクラスのコンストラクタに渡す。そうすることで、FilterOutputStreamクラスのoutフィールドにこのOutputStreamクラスが格納される。このOutputStreamクラスは「出力先」に当たる。
その後、任意の(可能なら全ての)write()メソッドをオーバーロードする。基本的には、outフィールドのwrite()メソッドを呼び出して「出力先」へバイトデータを出力する。ただし、このサブクラスで行いたい機能によっては、バイトデータを加工してから出力する。
write()メソッドは、このサブクラスを他の「中継ぎ」クラスもしくは「出力用」クラスに渡した場合、そのwrite()メソッドから呼び出される。
つまり、「出力用」→「中継ぎ」→「出力先」の順でwrite()メソッドを呼び出していき、出力先のバイトストリームに出力する。
ストリームクラス。OutputStreamクラスのサブクラスであり、バイト出力ストリームクラスである。
バイト出力ストリームクラスの中では「中継ぎ」に位置する。
対になる入力側のクラスはDataInputStreamクラスである。
バイト出力ストリームの「中継ぎ」クラスのスーパークラス。
「出力用」→「中継ぎ」→「出力先」という連携の中で、「出力用」に渡したバイトデータを書き換えたりといった「中間位置での立ち回り」を行うクラスの、スーパークラスとなるクラスである。
そういったスーパークラスとしての役目だけ持つため、このクラスのみを単独で使用することはない。このクラスのサブクラスを使用するか、もしくはサブクラスを作成して使用する。
サブクラスにはBufferedOutputStreamクラス、DataOutputStreamクラス、PrintStreamクラス等のクラスがある。
FilterOutputStreamクラスのサブクラスを作成する場合、まずコンストラクタでOutputStreamクラスを引数に受け取り、FilterOutputStreamクラスのコンストラクタに渡す。そうすることで、FilterOutputStreamクラスのoutフィールドにこのOutputStreamクラスが格納される。このOutputStreamクラスは「出力先」に当たる。
その後、任意の(可能なら全ての)write()メソッドをオーバーロードする。基本的には、outフィールドのwrite()メソッドを呼び出して「出力先」へバイトデータを出力する。ただし、このサブクラスで行いたい機能によっては、バイトデータを加工してから出力する。
write()メソッドは、このサブクラスを他の「中継ぎ」クラスもしくは「出力用」クラスに渡した場合、そのwrite()メソッドから呼び出される。
つまり、「出力用」→「中継ぎ」→「出力先」の順でwrite()メソッドを呼び出していき、出力先のバイトストリームに出力する。
参考サイト
// Sample.java
import java.io.OutputStream;
import java.io.ByteArrayOutputStream;
import java.io.PrintStream;
import java.io.FilterOutputStream;
import java.io.IOException;
public class Sample
{
public static void main( String[] args )
{
ByteArrayOutputStream byteArrayOutputStream = null;
NormalFilterOutputStream normalFilterOutputStream = null;
PrintStream printStream = null;
try
{
// 「出力先」のByteArrayInputStreamクラスを用意します。
byteArrayOutputStream = new ByteArrayOutputStream();
// このクラスを対象とするNormalFilterOutputStreamクラスを用意します。
normalFilterOutputStream = new NormalFilterOutputStream( byteArrayOutputStream );
// このクラスを対象とするPrintStreamクラスを用意します。
printStream = new PrintStream( normalFilterOutputStream );
// つまり、
// PrintStream
// ↓
// NormalFilterOutputStream
// ↓
// ByteArrayOutputStream
// という形で、バイト出力ストリームクラスが連結したことになります。
// 出力します。
printStream.write( 1 );
printStream.write( 2 );
printStream.write( 3 );
// NormalFilterOutputStream#write() : 1
// NormalFilterOutputStream#write() : 2
// NormalFilterOutputStream#write() : 3
// 書き込まれたバイトデータをbyte型配列として取得します。
byte[] bytes = byteArrayOutputStream.toByteArray();
for( int iF1 = 0; iF1 < bytes.length; ++iF1 )
{
// 出力します。
System.out.println( "0x" + Integer.toHexString( bytes[iF1] ) + " ( " + bytes[iF1] + " )" );
}
// 0x1 ( 1 )
// 0x2 ( 2 )
// 0x3 ( 3 )
// このように、printStreamのwrite()メソッドを呼ぶと、
// normalFilterOutputStreamのwrite()メソッドを呼び出し、さらに
// byteArrayOutputStreamのwrite()メソッドを呼び出します。
// つまりバイト出力ストリームが連結して「チェーン」になった
// というわけです。
}
finally
{
// 処理が終わったら、最後にclose()メソッドを呼んで
// 後処理をします。また、これは必ず行うため、
// finally内で行います。
if( printStream != null )
{
printStream.close();
}
// 処理が終わったら、最後にclose()メソッドを呼んで
// 後処理をします。また、これは必ず行うため、
// finally内で行います。
try
{
if( normalFilterOutputStream != null )
{
normalFilterOutputStream.close();
}
}
catch( IOException e )
{
// close()メソッドはIOExceptionがthrows指定されているので
// 一応受け取ります。
e.printStackTrace();
}
// 処理が終わったら、最後にclose()メソッドを呼んで
// 後処理をします。また、これは必ず行うため、
// finally内で行います。
try
{
if( byteArrayOutputStream != null )
{
byteArrayOutputStream.close();
}
}
catch( IOException e )
{
// close()メソッドはIOExceptionがthrows指定されているので
// 一応受け取ります。
e.printStackTrace();
}
}
}
}
/**
* NormalFilterOutputStreamクラス。
* FilterOutputStreamクラスのサブクラスです。
*/
class NormalFilterOutputStream extends FilterOutputStream
{
/**
* コンストラクタ。
* 引数に「出力先」となるバイト出力ストリームクラスを受け取ります。
* 「中継ぎ」に当たるので、OutputStreamクラスを引数に受け取ります。
*/
public NormalFilterOutputStream( OutputStream out )
{
// 処理はスーパークラスが受け持ってくれるので、
// スーパークラスに渡します。
super( out );
}
/**
* write()メソッド。
* このクラスを利用するバイト出力ストリームクラスの
* write()メソッドから呼び出されます。
*/
public void write( int b ) throws IOException
{
// スーパークラスであるFilterOutputStreamクラスの
// outフィールドに「出力先」のOutputStreamクラスが
// 入っているので、そのwrite()メソッドを呼び出します。
out.write( b );
System.out.println( "NormalFilterOutputStream#write() : " + b );
}
}
import java.io.OutputStream;
import java.io.ByteArrayOutputStream;
import java.io.PrintStream;
import java.io.FilterOutputStream;
import java.io.IOException;
public class Sample
{
public static void main( String[] args )
{
ByteArrayOutputStream byteArrayOutputStream = null;
NormalFilterOutputStream normalFilterOutputStream = null;
PrintStream printStream = null;
try
{
// 「出力先」のByteArrayInputStreamクラスを用意します。
byteArrayOutputStream = new ByteArrayOutputStream();
// このクラスを対象とするNormalFilterOutputStreamクラスを用意します。
normalFilterOutputStream = new NormalFilterOutputStream( byteArrayOutputStream );
// このクラスを対象とするPrintStreamクラスを用意します。
printStream = new PrintStream( normalFilterOutputStream );
// つまり、
// PrintStream
// ↓
// NormalFilterOutputStream
// ↓
// ByteArrayOutputStream
// という形で、バイト出力ストリームクラスが連結したことになります。
// 出力します。
printStream.write( 1 );
printStream.write( 2 );
printStream.write( 3 );
// NormalFilterOutputStream#write() : 1
// NormalFilterOutputStream#write() : 2
// NormalFilterOutputStream#write() : 3
// 書き込まれたバイトデータをbyte型配列として取得します。
byte[] bytes = byteArrayOutputStream.toByteArray();
for( int iF1 = 0; iF1 < bytes.length; ++iF1 )
{
// 出力します。
System.out.println( "0x" + Integer.toHexString( bytes[iF1] ) + " ( " + bytes[iF1] + " )" );
}
// 0x1 ( 1 )
// 0x2 ( 2 )
// 0x3 ( 3 )
// このように、printStreamのwrite()メソッドを呼ぶと、
// normalFilterOutputStreamのwrite()メソッドを呼び出し、さらに
// byteArrayOutputStreamのwrite()メソッドを呼び出します。
// つまりバイト出力ストリームが連結して「チェーン」になった
// というわけです。
}
finally
{
// 処理が終わったら、最後にclose()メソッドを呼んで
// 後処理をします。また、これは必ず行うため、
// finally内で行います。
if( printStream != null )
{
printStream.close();
}
// 処理が終わったら、最後にclose()メソッドを呼んで
// 後処理をします。また、これは必ず行うため、
// finally内で行います。
try
{
if( normalFilterOutputStream != null )
{
normalFilterOutputStream.close();
}
}
catch( IOException e )
{
// close()メソッドはIOExceptionがthrows指定されているので
// 一応受け取ります。
e.printStackTrace();
}
// 処理が終わったら、最後にclose()メソッドを呼んで
// 後処理をします。また、これは必ず行うため、
// finally内で行います。
try
{
if( byteArrayOutputStream != null )
{
byteArrayOutputStream.close();
}
}
catch( IOException e )
{
// close()メソッドはIOExceptionがthrows指定されているので
// 一応受け取ります。
e.printStackTrace();
}
}
}
}
/**
* NormalFilterOutputStreamクラス。
* FilterOutputStreamクラスのサブクラスです。
*/
class NormalFilterOutputStream extends FilterOutputStream
{
/**
* コンストラクタ。
* 引数に「出力先」となるバイト出力ストリームクラスを受け取ります。
* 「中継ぎ」に当たるので、OutputStreamクラスを引数に受け取ります。
*/
public NormalFilterOutputStream( OutputStream out )
{
// 処理はスーパークラスが受け持ってくれるので、
// スーパークラスに渡します。
super( out );
}
/**
* write()メソッド。
* このクラスを利用するバイト出力ストリームクラスの
* write()メソッドから呼び出されます。
*/
public void write( int b ) throws IOException
{
// スーパークラスであるFilterOutputStreamクラスの
// outフィールドに「出力先」のOutputStreamクラスが
// 入っているので、そのwrite()メソッドを呼び出します。
out.write( b );
System.out.println( "NormalFilterOutputStream#write() : " + b );
}
}
// Sample.java
import java.io.OutputStream;
import java.io.ByteArrayOutputStream;
import java.io.PrintStream;
import java.io.FilterOutputStream;
import java.io.IOException;
public class Sample
{
public static void main( String[] args )
{
ByteArrayOutputStream byteArrayOutputStream = null;
NormalFilterOutputStream normalFilterOutputStream = null;
PrintStream printStream = null;
try
{
// 「出力先」のByteArrayInputStreamクラスを用意します。
byteArrayOutputStream = new ByteArrayOutputStream();
// このクラスを対象とするNormalFilterOutputStreamクラスを用意します。
normalFilterOutputStream = new NormalFilterOutputStream( byteArrayOutputStream );
// このクラスを対象とするPrintStreamクラスを用意します。
printStream = new PrintStream( normalFilterOutputStream );
// つまり、
// PrintStream
// ↓
// NormalFilterOutputStream
// ↓
// ByteArrayOutputStream
// という形で、バイト出力ストリームクラスが連結したことになります。
// 出力します。
printStream.write( 1 );
printStream.write( 2 );
printStream.write( 3 );
// NormalFilterOutputStream#write() : 1
// NormalFilterOutputStream#write() : 2
// NormalFilterOutputStream#write() : 3
// 書き込まれたバイトデータをbyte型配列として取得します。
byte[] bytes = byteArrayOutputStream.toByteArray();
for( int iF1 = 0; iF1 < bytes.length; ++iF1 )
{
// 出力します。
System.out.println( "0x" + Integer.toHexString( bytes[iF1] ) + " ( " + bytes[iF1] + " )" );
}
// 0x1 ( 1 )
// 0x2 ( 2 )
// 0x3 ( 3 )
// このように、printStreamのwrite()メソッドを呼ぶと、
// normalFilterOutputStreamのwrite()メソッドを呼び出し、さらに
// byteArrayOutputStreamのwrite()メソッドを呼び出します。
// つまりバイト出力ストリームが連結して「チェーン」になった
// というわけです。
}
finally
{
// 処理が終わったら、最後にclose()メソッドを呼んで
// 後処理をします。また、これは必ず行うため、
// finally内で行います。
if( printStream != null )
{
printStream.close();
}
// 処理が終わったら、最後にclose()メソッドを呼んで
// 後処理をします。また、これは必ず行うため、
// finally内で行います。
try
{
if( normalFilterOutputStream != null )
{
normalFilterOutputStream.close();
}
}
catch( IOException e )
{
// close()メソッドはIOExceptionがthrows指定されているので
// 一応受け取ります。
e.printStackTrace();
}
// 処理が終わったら、最後にclose()メソッドを呼んで
// 後処理をします。また、これは必ず行うため、
// finally内で行います。
try
{
if( byteArrayOutputStream != null )
{
byteArrayOutputStream.close();
}
}
catch( IOException e )
{
// close()メソッドはIOExceptionがthrows指定されているので
// 一応受け取ります。
e.printStackTrace();
}
}
}
}
/**
* NormalFilterOutputStreamクラス。
* FilterOutputStreamクラスのサブクラスです。
*/
class NormalFilterOutputStream extends FilterOutputStream
{
/**
* コンストラクタ。
* 引数に「出力先」となるバイト出力ストリームクラスを受け取ります。
* 「中継ぎ」に当たるので、OutputStreamクラスを引数に受け取ります。
*/
public NormalFilterOutputStream( OutputStream out )
{
// 処理はスーパークラスが受け持ってくれるので、
// スーパークラスに渡します。
super( out );
}
/**
* write()メソッド。
* このクラスを利用するバイト出力ストリームクラスの
* write()メソッドから呼び出されます。
*/
public void write( int b ) throws IOException
{
// スーパークラスであるFilterOutputStreamクラスの
// outフィールドに「出力先」のOutputStreamクラスが
// 入っているので、そのwrite()メソッドを呼び出します。
out.write( b );
System.out.println( "NormalFilterOutputStream#write() : " + b );
}
}




