StringBufferInputStream
日本語 | 文字列緩衝地入力流れ |
英語 | string buffer input stream |
ふりがな | すとりんぐばっふぁーいんぷっとすとりーむ |
フリガナ | ストリングバッファーインプットストリーム |
J2SEに含まれるクラスのひとつ。パッケージも含めたクラス名はjava.io.StringBufferInputStream。
ストリームクラス。InputStreamクラスのサブクラスであり、バイト入力ストリームクラスである。
バイト入力ストリームクラスの中では「入力元」に位置する。
対になる出力側のクラスは存在しない。
「推奨されていません」なクラスのため、使用しない方がよい。
Stringクラスを入力元とするクラス。
Stringクラスの一文字ずつをbyte型配列とみなし、取得することのできるクラス。
だが、このクラスは使用してはいけない。
このStringBufferInputStreamクラスは、本来2バイトのchar型変数から、右1バイトのみを取り出し、byte型として取り出す。
そのため、日本語の文字列のように2バイト使用する文字は、左1バイトを取得することができない。
バイト入力ストリームは「バイト」を対象とするものであるため、文字列として正しく取得する機能が備わっていないためである。
代わりに、文字入力ストリームであるStringReaderクラスがあるため、StringReaderクラスを使用すること。
ストリームクラス。InputStreamクラスのサブクラスであり、バイト入力ストリームクラスである。
バイト入力ストリームクラスの中では「入力元」に位置する。
対になる出力側のクラスは存在しない。
「推奨されていません」なクラスのため、使用しない方がよい。
Stringクラスを入力元とするクラス。
Stringクラスの一文字ずつをbyte型配列とみなし、取得することのできるクラス。
だが、このクラスは使用してはいけない。
このStringBufferInputStreamクラスは、本来2バイトのchar型変数から、右1バイトのみを取り出し、byte型として取り出す。
そのため、日本語の文字列のように2バイト使用する文字は、左1バイトを取得することができない。
バイト入力ストリームは「バイト」を対象とするものであるため、文字列として正しく取得する機能が備わっていないためである。
代わりに、文字入力ストリームであるStringReaderクラスがあるため、StringReaderクラスを使用すること。
// Sample.java
import java.io.StringBufferInputStream;
import java.io.IOException;
public class Sample
{
public static void main( String[] args )
{
StringBufferInputStream stringBufferInputStream = null;
try
{
// 処理対象の文字列。
String source = "ABCあい";
// その文字列を読み込み対象とする
// StringBufferInputStreamクラスを作ります。
stringBufferInputStream = new StringBufferInputStream( source );
while( true )
{
// 1バイト取得します。
int i = stringBufferInputStream.read();
if( i == -1 )
{
// -1が返されてきたら終わりです。
break;
}
// 出力します。
System.out.println( "0x" + Integer.toHexString( i ) + " ( " + i + " )" );
}
// 0x41 ( 65 ) // A
// 0x42 ( 66 ) // B
// 0x43 ( 67 ) // C
// 0x42 ( 66 ) // あ
// 0x44 ( 68 ) // い
// このように、StringBufferInputStreamクラスは、
// 対象のStringクラスの「1文字ずつ」を対象に取得します。
// ……ですので、ASCII文字は問題ありませんが、
// 日本語の文字列は正しく取得できません。
// 「あ」は、Unicodeの文字コード「0x3042」の右1バイトのみが
// 返されています。
// ですので、このクラスは使用しては行けません。
// だから「推奨されていません」です。
// read()メソッドはIOException例外を投げないので、
// catchする必要はありません。
}
finally
{
// 処理が終わったら、最後にclose()メソッドを呼んで
// 後処理をします。また、これは必ず行うため、
// finally内で行います。
try
{
if( stringBufferInputStream != null )
{
stringBufferInputStream.close();
}
}
catch( IOException e )
{
// close()メソッドはIOExceptionがthrows指定されているので
// 一応受け取ります。
e.printStackTrace();
}
}
}
}
import java.io.StringBufferInputStream;
import java.io.IOException;
public class Sample
{
public static void main( String[] args )
{
StringBufferInputStream stringBufferInputStream = null;
try
{
// 処理対象の文字列。
String source = "ABCあい";
// その文字列を読み込み対象とする
// StringBufferInputStreamクラスを作ります。
stringBufferInputStream = new StringBufferInputStream( source );
while( true )
{
// 1バイト取得します。
int i = stringBufferInputStream.read();
if( i == -1 )
{
// -1が返されてきたら終わりです。
break;
}
// 出力します。
System.out.println( "0x" + Integer.toHexString( i ) + " ( " + i + " )" );
}
// 0x41 ( 65 ) // A
// 0x42 ( 66 ) // B
// 0x43 ( 67 ) // C
// 0x42 ( 66 ) // あ
// 0x44 ( 68 ) // い
// このように、StringBufferInputStreamクラスは、
// 対象のStringクラスの「1文字ずつ」を対象に取得します。
// ……ですので、ASCII文字は問題ありませんが、
// 日本語の文字列は正しく取得できません。
// 「あ」は、Unicodeの文字コード「0x3042」の右1バイトのみが
// 返されています。
// ですので、このクラスは使用しては行けません。
// だから「推奨されていません」です。
// read()メソッドはIOException例外を投げないので、
// catchする必要はありません。
}
finally
{
// 処理が終わったら、最後にclose()メソッドを呼んで
// 後処理をします。また、これは必ず行うため、
// finally内で行います。
try
{
if( stringBufferInputStream != null )
{
stringBufferInputStream.close();
}
}
catch( IOException e )
{
// close()メソッドはIOExceptionがthrows指定されているので
// 一応受け取ります。
e.printStackTrace();
}
}
}
}
// Sample.java import java.io.StringBufferInputStream; import java.io.IOException; public class Sample { public static void main( String[] args ) { StringBufferInputStream stringBufferInputStream = null; try { // 処理対象の文字列。 String source = "ABCあい"; // その文字列を読み込み対象とする // StringBufferInputStreamクラスを作ります。 stringBufferInputStream = new StringBufferInputStream( source ); while( true ) { // 1バイト取得します。 int i = stringBufferInputStream.read(); if( i == -1 ) { // -1が返されてきたら終わりです。 break; } // 出力します。 System.out.println( "0x" + Integer.toHexString( i ) + " ( " + i + " )" ); } // 0x41 ( 65 ) // A // 0x42 ( 66 ) // B // 0x43 ( 67 ) // C // 0x42 ( 66 ) // あ // 0x44 ( 68 ) // い // このように、StringBufferInputStreamクラスは、 // 対象のStringクラスの「1文字ずつ」を対象に取得します。 // ……ですので、ASCII文字は問題ありませんが、 // 日本語の文字列は正しく取得できません。 // 「あ」は、Unicodeの文字コード「0x3042」の右1バイトのみが // 返されています。 // ですので、このクラスは使用しては行けません。 // だから「推奨されていません」です。 // read()メソッドはIOException例外を投げないので、 // catchする必要はありません。 } finally { // 処理が終わったら、最後にclose()メソッドを呼んで // 後処理をします。また、これは必ず行うため、 // finally内で行います。 try { if( stringBufferInputStream != null ) { stringBufferInputStream.close(); } } catch( IOException e ) { // close()メソッドはIOExceptionがthrows指定されているので // 一応受け取ります。 e.printStackTrace(); } } } }