OutputStreamWriter
日本語 | 出力流れ書記 |
英語 | output stream writer |
ふりがな | あうとぷっとすとりーむらいたー |
フリガナ | アウトプットストリームライター |
J2SEに含まれるクラスのひとつ。パッケージも含めたクラス名はjava.io.OutputStreamWriter。
ストリームクラス。Writerクラスのサブクラスであり、文字出力ストリームクラスである。
文字出力ストリームクラスの中では「中継ぎ」に位置する。
対になる入力側のクラスはInputStreamReaderクラスである。
文字出力ストリームの「中継ぎ」クラスのスーパークラス。
「出力用」→「中継ぎ」→「出力先」という連携の中で、「出力用」に渡した文字データを書き換えたりといった「中間位置での立ち回り」を行うクラスの、スーパークラスとなるクラスである。
ただし、OutputStreamWriterクラスは「出力先」をバイト出力ストリーム、つまりOutputStreamクラスに限定している。
つまり、OutputStreamWriterクラスは、WriterクラスのサブクラスとOutputStreamクラスのサブクラスの「仲介役」となるクラスである。
文字は、バイナリーデータの一種である。
文字出力ストリームは、バイト出力ストリームの一種である、ということが言える。
そのため、文字出力ストリームをバイト出力ストリームへと変換し渡す必要がある場合がある。その時に使用するのがOutputStreamWriterクラスである。
OutputStreamWriterクラスはOutputStreamクラスのサブクラスを受け取り、outフィールドに持つ。
write()メソッドが呼び出され文字もしくは文字列が渡された場合、指定された文字コード(指定されていない場合にはOS標準の文字コード)の形式でbyte型配列へと変換し、outフィールドのwrite()メソッドへとbyte型配列を渡し出力する。
つまり、「文字列」というデータを、特定文字コードの「byte型配列」へと変換し、バイト出力ストリームへと出力するのがOutputStreamWriterクラスの役目である。
OutputStreamWriterクラスのコンストラクタに「出力先」となるOutputStreamクラスのサブクラスを渡す。また、任意の文字コードに変換する場合には、第2引数に文字コードを指定する。指定されなかった場合には、OS標準の文字コードに変換する。たとえばWindowsであればCP932に変換することになる。
OutputStreamWriterクラスのwrite()メソッドを呼び出し、文字もしくは文字列が渡すと、指定された文字コードに変換してからbyte型配列の形式にし、これを「出力先」の「OutputStreamクラスのサブクラス」のwrite()メソッドへと渡す。
処理終了後はclose()メソッドを呼び終了処理を行う。
ストリームクラス。Writerクラスのサブクラスであり、文字出力ストリームクラスである。
文字出力ストリームクラスの中では「中継ぎ」に位置する。
対になる入力側のクラスはInputStreamReaderクラスである。
文字出力ストリームの「中継ぎ」クラスのスーパークラス。
「出力用」→「中継ぎ」→「出力先」という連携の中で、「出力用」に渡した文字データを書き換えたりといった「中間位置での立ち回り」を行うクラスの、スーパークラスとなるクラスである。
ただし、OutputStreamWriterクラスは「出力先」をバイト出力ストリーム、つまりOutputStreamクラスに限定している。
つまり、OutputStreamWriterクラスは、WriterクラスのサブクラスとOutputStreamクラスのサブクラスの「仲介役」となるクラスである。
文字は、バイナリーデータの一種である。
文字出力ストリームは、バイト出力ストリームの一種である、ということが言える。
そのため、文字出力ストリームをバイト出力ストリームへと変換し渡す必要がある場合がある。その時に使用するのがOutputStreamWriterクラスである。
OutputStreamWriterクラスはOutputStreamクラスのサブクラスを受け取り、outフィールドに持つ。
write()メソッドが呼び出され文字もしくは文字列が渡された場合、指定された文字コード(指定されていない場合にはOS標準の文字コード)の形式でbyte型配列へと変換し、outフィールドのwrite()メソッドへとbyte型配列を渡し出力する。
つまり、「文字列」というデータを、特定文字コードの「byte型配列」へと変換し、バイト出力ストリームへと出力するのがOutputStreamWriterクラスの役目である。
OutputStreamWriterクラスのコンストラクタに「出力先」となるOutputStreamクラスのサブクラスを渡す。また、任意の文字コードに変換する場合には、第2引数に文字コードを指定する。指定されなかった場合には、OS標準の文字コードに変換する。たとえばWindowsであればCP932に変換することになる。
OutputStreamWriterクラスのwrite()メソッドを呼び出し、文字もしくは文字列が渡すと、指定された文字コードに変換してからbyte型配列の形式にし、これを「出力先」の「OutputStreamクラスのサブクラス」のwrite()メソッドへと渡す。
処理終了後はclose()メソッドを呼び終了処理を行う。
// Sample.java
import java.io.ByteArrayOutputStream;
import java.io.PrintWriter;
import java.io.OutputStreamWriter;
import java.io.IOException;
import java.io.UnsupportedEncodingException;
public class Sample
{
public static void main( String[] args )
{
ByteArrayOutputStream byteArrayOutputStream = null;
OutputStreamWriter outputStreamWriter = null;
PrintWriter printWriter = null;
try
{
// 「出力先」のByteArrayOutputStreamクラスを用意します。
byteArrayOutputStream = new ByteArrayOutputStream();
// このクラスを対象とするOutputStreamWriterクラスを用意します。
outputStreamWriter = new OutputStreamWriter( byteArrayOutputStream, "UTF-8" );
// このクラスを対象とするPrintWriterクラスを用意します。
printWriter = new PrintWriter( outputStreamWriter );
// つまり、
// PrintWriter
// ↓
// OutputStreamWriter
// ↓
// ByteArrayOutputStream
// という形で、文字出力ストリームクラスが連結したことになります。
// 出力します。
printWriter.write( 'あ' );
printWriter.write( 'い' );
printWriter.write( 'う' );
// フラッシュして出力します。
printWriter.flush();
// 書き込まれたバイトデータをbyte型配列として取得します。
byte[] bytes = byteArrayOutputStream.toByteArray();
for( int iF1 = 0; iF1 < bytes.length; ++iF1 )
{
// 出力します。
System.out.println( "0x" + Integer.toHexString( 0x000000FF & (int)bytes[iF1] ) );
}
// 0xe3 // 「あ」の1バイト目。
// 0x81 // 「あ」の2バイト目。
// 0x82 // 「あ」の3バイト目。
// 0xe3 // 「い」の1バイト目。
// 0x81 // 「い」の2バイト目。
// 0x84 // 「い」の3バイト目。
// 0xe3 // 「う」の1バイト目。
// 0x81 // 「う」の2バイト目。
// 0x86 // 「う」の3バイト目。
// (注:全てUTF-8の文字コードです。UTF-8なのは、
// OutputStreamWriterクラスのコンストラクタで
// 指定しているからです)
// このように、printWriterのwrite()メソッドを呼ぶと、
// outputStreamWriterのwrite()メソッドを呼び出し、さらに
// byteArrayOutputStreamのwrite()メソッドを呼び出します。
// つまり文字出力ストリームとバイト出力ストリームが連結して
// 「チェーン」になったというわけです。
// また、出力する際、指定した文字コードに変換し、
// byte型配列に変換してから、出力先のバイト出力ストリームに
// 出力するというわけです。
}
catch( UnsupportedEncodingException e )
{
// 指定した文字コードが存在しない場合には
// UnsupportedEncodingException例外が投げられます。
e.printStackTrace();
}
finally
{
// 処理が終わったら、最後にclose()メソッドを呼んで
// 後処理をします。また、これは必ず行うため、
// finally内で行います。
if( printWriter != null )
{
printWriter.close();
}
// 処理が終わったら、最後にclose()メソッドを呼んで
// 後処理をします。また、これは必ず行うため、
// finally内で行います。
try
{
if( outputStreamWriter != null )
{
outputStreamWriter.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();
}
}
}
}
import java.io.ByteArrayOutputStream;
import java.io.PrintWriter;
import java.io.OutputStreamWriter;
import java.io.IOException;
import java.io.UnsupportedEncodingException;
public class Sample
{
public static void main( String[] args )
{
ByteArrayOutputStream byteArrayOutputStream = null;
OutputStreamWriter outputStreamWriter = null;
PrintWriter printWriter = null;
try
{
// 「出力先」のByteArrayOutputStreamクラスを用意します。
byteArrayOutputStream = new ByteArrayOutputStream();
// このクラスを対象とするOutputStreamWriterクラスを用意します。
outputStreamWriter = new OutputStreamWriter( byteArrayOutputStream, "UTF-8" );
// このクラスを対象とするPrintWriterクラスを用意します。
printWriter = new PrintWriter( outputStreamWriter );
// つまり、
// PrintWriter
// ↓
// OutputStreamWriter
// ↓
// ByteArrayOutputStream
// という形で、文字出力ストリームクラスが連結したことになります。
// 出力します。
printWriter.write( 'あ' );
printWriter.write( 'い' );
printWriter.write( 'う' );
// フラッシュして出力します。
printWriter.flush();
// 書き込まれたバイトデータをbyte型配列として取得します。
byte[] bytes = byteArrayOutputStream.toByteArray();
for( int iF1 = 0; iF1 < bytes.length; ++iF1 )
{
// 出力します。
System.out.println( "0x" + Integer.toHexString( 0x000000FF & (int)bytes[iF1] ) );
}
// 0xe3 // 「あ」の1バイト目。
// 0x81 // 「あ」の2バイト目。
// 0x82 // 「あ」の3バイト目。
// 0xe3 // 「い」の1バイト目。
// 0x81 // 「い」の2バイト目。
// 0x84 // 「い」の3バイト目。
// 0xe3 // 「う」の1バイト目。
// 0x81 // 「う」の2バイト目。
// 0x86 // 「う」の3バイト目。
// (注:全てUTF-8の文字コードです。UTF-8なのは、
// OutputStreamWriterクラスのコンストラクタで
// 指定しているからです)
// このように、printWriterのwrite()メソッドを呼ぶと、
// outputStreamWriterのwrite()メソッドを呼び出し、さらに
// byteArrayOutputStreamのwrite()メソッドを呼び出します。
// つまり文字出力ストリームとバイト出力ストリームが連結して
// 「チェーン」になったというわけです。
// また、出力する際、指定した文字コードに変換し、
// byte型配列に変換してから、出力先のバイト出力ストリームに
// 出力するというわけです。
}
catch( UnsupportedEncodingException e )
{
// 指定した文字コードが存在しない場合には
// UnsupportedEncodingException例外が投げられます。
e.printStackTrace();
}
finally
{
// 処理が終わったら、最後にclose()メソッドを呼んで
// 後処理をします。また、これは必ず行うため、
// finally内で行います。
if( printWriter != null )
{
printWriter.close();
}
// 処理が終わったら、最後にclose()メソッドを呼んで
// 後処理をします。また、これは必ず行うため、
// finally内で行います。
try
{
if( outputStreamWriter != null )
{
outputStreamWriter.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();
}
}
}
}
// Sample.java import java.io.ByteArrayOutputStream; import java.io.PrintWriter; import java.io.OutputStreamWriter; import java.io.IOException; import java.io.UnsupportedEncodingException; public class Sample { public static void main( String[] args ) { ByteArrayOutputStream byteArrayOutputStream = null; OutputStreamWriter outputStreamWriter = null; PrintWriter printWriter = null; try { // 「出力先」のByteArrayOutputStreamクラスを用意します。 byteArrayOutputStream = new ByteArrayOutputStream(); // このクラスを対象とするOutputStreamWriterクラスを用意します。 outputStreamWriter = new OutputStreamWriter( byteArrayOutputStream, "UTF-8" ); // このクラスを対象とするPrintWriterクラスを用意します。 printWriter = new PrintWriter( outputStreamWriter ); // つまり、 // PrintWriter // ↓ // OutputStreamWriter // ↓ // ByteArrayOutputStream // という形で、文字出力ストリームクラスが連結したことになります。 // 出力します。 printWriter.write( 'あ' ); printWriter.write( 'い' ); printWriter.write( 'う' ); // フラッシュして出力します。 printWriter.flush(); // 書き込まれたバイトデータをbyte型配列として取得します。 byte[] bytes = byteArrayOutputStream.toByteArray(); for( int iF1 = 0; iF1 < bytes.length; ++iF1 ) { // 出力します。 System.out.println( "0x" + Integer.toHexString( 0x000000FF & (int)bytes[iF1] ) ); } // 0xe3 // 「あ」の1バイト目。 // 0x81 // 「あ」の2バイト目。 // 0x82 // 「あ」の3バイト目。 // 0xe3 // 「い」の1バイト目。 // 0x81 // 「い」の2バイト目。 // 0x84 // 「い」の3バイト目。 // 0xe3 // 「う」の1バイト目。 // 0x81 // 「う」の2バイト目。 // 0x86 // 「う」の3バイト目。 // (注:全てUTF-8の文字コードです。UTF-8なのは、 // OutputStreamWriterクラスのコンストラクタで // 指定しているからです) // このように、printWriterのwrite()メソッドを呼ぶと、 // outputStreamWriterのwrite()メソッドを呼び出し、さらに // byteArrayOutputStreamのwrite()メソッドを呼び出します。 // つまり文字出力ストリームとバイト出力ストリームが連結して // 「チェーン」になったというわけです。 // また、出力する際、指定した文字コードに変換し、 // byte型配列に変換してから、出力先のバイト出力ストリームに // 出力するというわけです。 } catch( UnsupportedEncodingException e ) { // 指定した文字コードが存在しない場合には // UnsupportedEncodingException例外が投げられます。 e.printStackTrace(); } finally { // 処理が終わったら、最後にclose()メソッドを呼んで // 後処理をします。また、これは必ず行うため、 // finally内で行います。 if( printWriter != null ) { printWriter.close(); } // 処理が終わったら、最後にclose()メソッドを呼んで // 後処理をします。また、これは必ず行うため、 // finally内で行います。 try { if( outputStreamWriter != null ) { outputStreamWriter.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(); } } } }