JavaA2Z

KAB-studio > プログラミング > JavaA2Z > LineNumberInputStreamとは

LineNumberInputStream

日本語 行番号入力流れ
英語 line number input stream
ふりがな らいんなんばーいんぷっとすとりーむ
フリガナ ラインナンバーインプットストリーム

解説

J2SEに含まれるクラスのひとつ。パッケージも含めたクラス名java.io.LineNumberInputStream。
ストリームクラスFilterInputStreamクラスサブクラスであり、バイト入力ストリームクラスである。
バイト入力ストリームクラスの中では「中継ぎ」に位置する。
対になる出力側のクラスは存在しない。
推奨されていません」なクラスのため、使用しない方がよい。
 
バイト入力ストリームを「文字列」とみなし、その「番号」を取得することができる。
番号は0から始まり、read()メソッド改行バイトを取得するたびに1ずつ増える。
番号はgetLineNumber()メソッドで取得する。また、「現在の番号」はsetLineNumber()メソッドで任意の番号をセットすることができる。
「指定したへ移動する」という機能はなく、単にカウンターを取得するだけなので、あまり使い道はない。
 
それどころか、、このクラスは使用してはいけない。
このLineNumberInputStreamクラスは、本来2バイトchar変数から、右1バイトのみを取り出し、byteとして取り出す。
そのため、日本語の文字列のように2バイト使用する文字は、左1バイトを取得することができない。
バイト入力ストリームは「バイト」を対象とするものであるため、文字列として正しく取得する機能が備わっていないためである。
代わりに、文字入力ストリームであるLineNumberReaderクラスがあるため、LineNumberReaderクラスを使用すること。

(KAB-studioからのおしらせです)

サンプルプログラム(とか)サンプルを別ウィンドウで表示サンプルをクリップボードへコピー(WindowsでIEの場合のみ)

// 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();
            }
        }
    }
}
// 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();
            }
        }
    }
}

この単語を含むページ

「みだし」に含まれているページ

「解説」に含まれているページ

「サンプルプログラムとか」に含まれているページ

はてなブックマーク 詳細を表示 はてなブックマーク ブックマーク数
livedoorクリップ 詳細を表示 livedoorクリップ ブックマーク数
Yahoo!ブックマーク 詳細を表示 users
del.icio.us 登録する RSSに登録
サンプルを別ウィンドウで表示
サンプルをクリップボードへコピー(WindowsでIEの場合のみ)
update:2005/11/18
このページは、Javaプログラミング言語についての用語を網羅した辞書「JavaA2Z」の一ページです。
詳しくは「JavaA2Z」表紙の説明をご覧ください。