LineNumberInputStream
日本語 | 行番号入力流れ |
英語 | line number input stream |
ふりがな | らいんなんばーいんぷっとすとりーむ |
フリガナ | ラインナンバーインプットストリーム |
J2SEに含まれるクラスのひとつ。パッケージも含めたクラス名はjava.io.LineNumberInputStream。
ストリームクラス。FilterInputStreamクラスのサブクラスであり、バイト入力ストリームクラスである。
バイト入力ストリームクラスの中では「中継ぎ」に位置する。
対になる出力側のクラスは存在しない。
「推奨されていません」なクラスのため、使用しない方がよい。
バイト入力ストリームを「文字列」とみなし、その「行番号」を取得することができる。
行番号は0から始まり、read()メソッドで改行バイトを取得するたびに1ずつ増える。
行番号はgetLineNumber()メソッドで取得する。また、「現在の行番号」はsetLineNumber()メソッドで任意の行番号をセットすることができる。
「指定した行へ移動する」という機能はなく、単にカウンターを取得するだけなので、あまり使い道はない。
それどころか、、このクラスは使用してはいけない。
このLineNumberInputStreamクラスは、本来2バイトのchar型変数から、右1バイトのみを取り出し、byte型として取り出す。
そのため、日本語の文字列のように2バイト使用する文字は、左1バイトを取得することができない。
バイト入力ストリームは「バイト」を対象とするものであるため、文字列として正しく取得する機能が備わっていないためである。
代わりに、文字入力ストリームであるLineNumberReaderクラスがあるため、LineNumberReaderクラスを使用すること。
ストリームクラス。FilterInputStreamクラスのサブクラスであり、バイト入力ストリームクラスである。
バイト入力ストリームクラスの中では「中継ぎ」に位置する。
対になる出力側のクラスは存在しない。
「推奨されていません」なクラスのため、使用しない方がよい。
バイト入力ストリームを「文字列」とみなし、その「行番号」を取得することができる。
行番号は0から始まり、read()メソッドで改行バイトを取得するたびに1ずつ増える。
行番号はgetLineNumber()メソッドで取得する。また、「現在の行番号」はsetLineNumber()メソッドで任意の行番号をセットすることができる。
「指定した行へ移動する」という機能はなく、単にカウンターを取得するだけなので、あまり使い道はない。
それどころか、、このクラスは使用してはいけない。
このLineNumberInputStreamクラスは、本来2バイトのchar型変数から、右1バイトのみを取り出し、byte型として取り出す。
そのため、日本語の文字列のように2バイト使用する文字は、左1バイトを取得することができない。
バイト入力ストリームは「バイト」を対象とするものであるため、文字列として正しく取得する機能が備わっていないためである。
代わりに、文字入力ストリームであるLineNumberReaderクラスがあるため、LineNumberReaderクラスを使用すること。
// Sample.java
import java.io.StringBufferInputStream;
import java.io.LineNumberInputStream;
import java.io.IOException;
public class Sample
{
public static void main( String[] args )
{
StringBufferInputStream stringBufferInputStream = null;
LineNumberInputStream lineNumberInputStream = null;
try
{
// 処理対象の文字列。
String source
= "A\n"
+ "BC\n"
+ "あ"
;
// その文字列を読み込み対象とする
// StringBufferInputStreamクラスを作ります。
stringBufferInputStream = new StringBufferInputStream( source );
// このクラスを対象とするLineNumberInputStreamクラスを用意します。
lineNumberInputStream = new LineNumberInputStream( stringBufferInputStream );
int lineNumber = 0;
int oneChar = 0;
//
lineNumber = lineNumberInputStream.getLineNumber();
oneChar = lineNumberInputStream.read();
System.out.println( lineNumber + " : 0x" + Integer.toHexString( oneChar ) + " ( " + oneChar + " )" );
// 0 : 0x41 ( 65 ) // A
lineNumber = lineNumberInputStream.getLineNumber();
oneChar = lineNumberInputStream.read();
System.out.println( lineNumber + " : 0x" + Integer.toHexString( oneChar ) + " ( " + oneChar + " )" );
// 0 : 0xa ( 10 ) // \n
lineNumber = lineNumberInputStream.getLineNumber();
oneChar = lineNumberInputStream.read();
System.out.println( lineNumber + " : 0x" + Integer.toHexString( oneChar ) + " ( " + oneChar + " )" );
// 1 : 0x42 ( 66 ) // B
// このように、改行を超えると行番号が1増えます。
// 行番号を100にします。
lineNumberInputStream.setLineNumber( 100 );
lineNumber = lineNumberInputStream.getLineNumber();
oneChar = lineNumberInputStream.read();
System.out.println( lineNumber + " : 0x" + Integer.toHexString( oneChar ) + " ( " + oneChar + " )" );
// 100 : 0x43 ( 67 ) // C
// このように、setLineNumber()メソッドで新しい行番号をセットすることができます。
lineNumber = lineNumberInputStream.getLineNumber();
oneChar = lineNumberInputStream.read();
System.out.println( lineNumber + " : 0x" + Integer.toHexString( oneChar ) + " ( " + oneChar + " )" );
// 100 : 0xa ( 10 ) // \n
lineNumber = lineNumberInputStream.getLineNumber();
oneChar = lineNumberInputStream.read();
System.out.println( lineNumber + " : 0x" + Integer.toHexString( oneChar ) + " ( " + oneChar + " )" );
// 101 : 0x42 ( 66 ) // あ
// このように、LineNumberInputStreamクラスは、
// Stringクラスの「1文字ずつ」を対象に取得します。
// ……ですので、ASCII文字は問題ありませんが、
// 日本語の文字列は正しく取得できません。
// 「あ」は、Unicodeの文字コード「0x3042」の右1バイトのみが
// 返されています。
// ですので、このクラスは使用しては行けません。
// だから「推奨されていません」です。
}
catch( IOException e )
{
// 読み込みに失敗した際に、read()メソッドが
// IOException例外を投げます。
e.printStackTrace();
}
finally
{
// 処理が終わったら、最後にclose()メソッドを呼んで
// 後処理をします。また、これは必ず行うため、
// finally内で行います。
try
{
if( lineNumberInputStream != null )
{
lineNumberInputStream.close();
}
}
catch( IOException e )
{
// close()メソッドはIOExceptionがthrows指定されているので
// 一応受け取ります。
e.printStackTrace();
}
// 処理が終わったら、最後にclose()メソッドを呼んで
// 後処理をします。また、これは必ず行うため、
// finally内で行います。
try
{
if( stringBufferInputStream != null )
{
stringBufferInputStream.close();
}
}
catch( IOException e )
{
// close()メソッドはIOExceptionがthrows指定されているので
// 一応受け取ります。
e.printStackTrace();
}
}
}
}
import java.io.StringBufferInputStream;
import java.io.LineNumberInputStream;
import java.io.IOException;
public class Sample
{
public static void main( String[] args )
{
StringBufferInputStream stringBufferInputStream = null;
LineNumberInputStream lineNumberInputStream = null;
try
{
// 処理対象の文字列。
String source
= "A\n"
+ "BC\n"
+ "あ"
;
// その文字列を読み込み対象とする
// StringBufferInputStreamクラスを作ります。
stringBufferInputStream = new StringBufferInputStream( source );
// このクラスを対象とするLineNumberInputStreamクラスを用意します。
lineNumberInputStream = new LineNumberInputStream( stringBufferInputStream );
int lineNumber = 0;
int oneChar = 0;
//
lineNumber = lineNumberInputStream.getLineNumber();
oneChar = lineNumberInputStream.read();
System.out.println( lineNumber + " : 0x" + Integer.toHexString( oneChar ) + " ( " + oneChar + " )" );
// 0 : 0x41 ( 65 ) // A
lineNumber = lineNumberInputStream.getLineNumber();
oneChar = lineNumberInputStream.read();
System.out.println( lineNumber + " : 0x" + Integer.toHexString( oneChar ) + " ( " + oneChar + " )" );
// 0 : 0xa ( 10 ) // \n
lineNumber = lineNumberInputStream.getLineNumber();
oneChar = lineNumberInputStream.read();
System.out.println( lineNumber + " : 0x" + Integer.toHexString( oneChar ) + " ( " + oneChar + " )" );
// 1 : 0x42 ( 66 ) // B
// このように、改行を超えると行番号が1増えます。
// 行番号を100にします。
lineNumberInputStream.setLineNumber( 100 );
lineNumber = lineNumberInputStream.getLineNumber();
oneChar = lineNumberInputStream.read();
System.out.println( lineNumber + " : 0x" + Integer.toHexString( oneChar ) + " ( " + oneChar + " )" );
// 100 : 0x43 ( 67 ) // C
// このように、setLineNumber()メソッドで新しい行番号をセットすることができます。
lineNumber = lineNumberInputStream.getLineNumber();
oneChar = lineNumberInputStream.read();
System.out.println( lineNumber + " : 0x" + Integer.toHexString( oneChar ) + " ( " + oneChar + " )" );
// 100 : 0xa ( 10 ) // \n
lineNumber = lineNumberInputStream.getLineNumber();
oneChar = lineNumberInputStream.read();
System.out.println( lineNumber + " : 0x" + Integer.toHexString( oneChar ) + " ( " + oneChar + " )" );
// 101 : 0x42 ( 66 ) // あ
// このように、LineNumberInputStreamクラスは、
// Stringクラスの「1文字ずつ」を対象に取得します。
// ……ですので、ASCII文字は問題ありませんが、
// 日本語の文字列は正しく取得できません。
// 「あ」は、Unicodeの文字コード「0x3042」の右1バイトのみが
// 返されています。
// ですので、このクラスは使用しては行けません。
// だから「推奨されていません」です。
}
catch( IOException e )
{
// 読み込みに失敗した際に、read()メソッドが
// IOException例外を投げます。
e.printStackTrace();
}
finally
{
// 処理が終わったら、最後にclose()メソッドを呼んで
// 後処理をします。また、これは必ず行うため、
// finally内で行います。
try
{
if( lineNumberInputStream != null )
{
lineNumberInputStream.close();
}
}
catch( IOException e )
{
// close()メソッドはIOExceptionがthrows指定されているので
// 一応受け取ります。
e.printStackTrace();
}
// 処理が終わったら、最後に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.LineNumberInputStream; import java.io.IOException; public class Sample { public static void main( String[] args ) { StringBufferInputStream stringBufferInputStream = null; LineNumberInputStream lineNumberInputStream = null; try { // 処理対象の文字列。 String source = "A\n" + "BC\n" + "あ" ; // その文字列を読み込み対象とする // StringBufferInputStreamクラスを作ります。 stringBufferInputStream = new StringBufferInputStream( source ); // このクラスを対象とするLineNumberInputStreamクラスを用意します。 lineNumberInputStream = new LineNumberInputStream( stringBufferInputStream ); int lineNumber = 0; int oneChar = 0; // lineNumber = lineNumberInputStream.getLineNumber(); oneChar = lineNumberInputStream.read(); System.out.println( lineNumber + " : 0x" + Integer.toHexString( oneChar ) + " ( " + oneChar + " )" ); // 0 : 0x41 ( 65 ) // A lineNumber = lineNumberInputStream.getLineNumber(); oneChar = lineNumberInputStream.read(); System.out.println( lineNumber + " : 0x" + Integer.toHexString( oneChar ) + " ( " + oneChar + " )" ); // 0 : 0xa ( 10 ) // \n lineNumber = lineNumberInputStream.getLineNumber(); oneChar = lineNumberInputStream.read(); System.out.println( lineNumber + " : 0x" + Integer.toHexString( oneChar ) + " ( " + oneChar + " )" ); // 1 : 0x42 ( 66 ) // B // このように、改行を超えると行番号が1増えます。 // 行番号を100にします。 lineNumberInputStream.setLineNumber( 100 ); lineNumber = lineNumberInputStream.getLineNumber(); oneChar = lineNumberInputStream.read(); System.out.println( lineNumber + " : 0x" + Integer.toHexString( oneChar ) + " ( " + oneChar + " )" ); // 100 : 0x43 ( 67 ) // C // このように、setLineNumber()メソッドで新しい行番号をセットすることができます。 lineNumber = lineNumberInputStream.getLineNumber(); oneChar = lineNumberInputStream.read(); System.out.println( lineNumber + " : 0x" + Integer.toHexString( oneChar ) + " ( " + oneChar + " )" ); // 100 : 0xa ( 10 ) // \n lineNumber = lineNumberInputStream.getLineNumber(); oneChar = lineNumberInputStream.read(); System.out.println( lineNumber + " : 0x" + Integer.toHexString( oneChar ) + " ( " + oneChar + " )" ); // 101 : 0x42 ( 66 ) // あ // このように、LineNumberInputStreamクラスは、 // Stringクラスの「1文字ずつ」を対象に取得します。 // ……ですので、ASCII文字は問題ありませんが、 // 日本語の文字列は正しく取得できません。 // 「あ」は、Unicodeの文字コード「0x3042」の右1バイトのみが // 返されています。 // ですので、このクラスは使用しては行けません。 // だから「推奨されていません」です。 } catch( IOException e ) { // 読み込みに失敗した際に、read()メソッドが // IOException例外を投げます。 e.printStackTrace(); } finally { // 処理が終わったら、最後にclose()メソッドを呼んで // 後処理をします。また、これは必ず行うため、 // finally内で行います。 try { if( lineNumberInputStream != null ) { lineNumberInputStream.close(); } } catch( IOException e ) { // close()メソッドはIOExceptionがthrows指定されているので // 一応受け取ります。 e.printStackTrace(); } // 処理が終わったら、最後にclose()メソッドを呼んで // 後処理をします。また、これは必ず行うため、 // finally内で行います。 try { if( stringBufferInputStream != null ) { stringBufferInputStream.close(); } } catch( IOException e ) { // close()メソッドはIOExceptionがthrows指定されているので // 一応受け取ります。 e.printStackTrace(); } } } }