目次 | |



22. パッケージjava.io


Javaの入出力は,ストリームの考え方の下に作られている。 ストリームは,時間と共に読み込み又は書き込みされる一般的には8ビットが1バイトのデータの並びとする。

パッケージ java.ioでは,すべての入力は,抽象クラスである InputStream のサブクラスを通じて行われ,すべての出力は,抽象クラスである OutputStream のサブクラスを通じて行われる。 この規則の唯一の例外は,クラス RandomAccessFile とする。このクラスは,ランダムアクセス及びおそらく読み書きが混合したファイルの読み書きができる。

入力ストリームに対しては,データの入力源は,ファイル,String,バイトの配列,出力ストリームに書き出されたバイト列(一般的には,他のスレッドによって行われる)などである。 入力ストリームを受け取って別の入力に渡す前に,変換又は拡張を行う“フィルタ入力ストリーム”もある。 例えば,LineNumberInputStream は,データを逐語的にそのまま通すが,改行をカウントする。

出力ストリームに対しては,データの出力先は,ファイル,バイトの配列,入力ストリームとして読まれるバッファ(一般的には,他のスレッドによって行われる)などである。 別の出力ストリームに書き出す前に,データの変換又は拡張を行う“フィルタ出力ストリーム”もある。

クラス File のインスタンスは,ファイルシステムの特定のファイルを識別するためのパス名(文字列)を表す。 ファイル名の変更又は削除などのファイルシステムに対する特定の操作は,ストリームを通じてではなく,このクラスで行われる。

クラス FileDescriptor のインスタンスは,ファイルシステム内の特定のファイルの抽象的な表示を表す。 このようなファイル記述子は,Java I/Oシステムによって内部的に生成される。

長整数,浮動小数点数,及び文字列のような,バイト又は文字以外のデータの転送を支援する二つのインタフェース DataInput 及び DataOutput もある。 クラス DataInputStream は,インタフェース DataInput を実装し,クラス DataOutputStream は,インタフェース DataOutput を実装する。 クラス RandomAccessFile は,DataInput及びDataOutputの両方を実装する。

クラス StreamTokenizer は,入力ストリームからのバイト列又は文字列を解析して,識別子,数値,文字列などのトークンに分割する簡単な支援を提供する。オプションで注釈を無視したり,オプションで改行を認識又は無視したりする。

パッケージ java.io で定義されているクラス階層は,次の通りとする。 (ボールド体で示したものがパッケージ java.io のクラスであり,他のものは,パッケージ java.lang のクラスである。サブクラスの関係をはっきりさせるためにここに示している)

Object                                               20.1
    interface DataInput                              22.1
    interface DataOutput                             22.2
    InputStream                                      22.3
        FileInputStream                              22.4
        PipedInputStream                             22.5
        ByteArrayInputStream                         22.6
        StringBufferInputStream                      22.7
        SequenceInputStream                          22.8
        FilterInputStream                            22.9
            BufferedInputStream                      22.10
            DataInputStream                          22.11
            LineNumberInputStream                    22.12
            PushBackInputStream                      22.13
    StreamTokenizer                                  22.14
    OutputStream                                     22.15
        FileOutputStream                             22.16
        PipedOutputStream                            22.17
        ByteArrayOutputStream                        22.18
        FilterOutputStream                           22.19
            BufferedOutputStream                     22.20
            DataOutputStream                         22.21
            PrintStream                              22.22
    RandomAccessFile                                 22.23
    File                                             22.24
    interface FileNameFilter                         22.25
    FileDescriptor                                   22.26
    Throwable                                        20.22
        Exception                                    20.22
            IOException                              22.27
                EOFException                         22.28
                FileNotFoundException                22.29
                InterruptedIOException               22.30
                UTFDataFormatException               22.31

22.1 インタフェース java.io.DataInput


インタフェース DataInputは,バイナリストリームからバイト列を読み込み,それらのデータを任意のJavaのプリミティブ型に再構成する方法を提供する。 Java修正版UTF-8形式のデータから String を再構成するための機能もある。

インタフェース DataOutput (22.2)は,インタフェース DataInput で読み戻すのに適しているバイナリ出力データの生成を支援する。

インタフェース DataInput は,クラス DataInputStream(22.11)及びRandomAccessFile(22.23)によって実装されている。

public interface DataInput {
    public void readFully(byte[] b)
        throws IOException, NullPointerException;
    public void readFully(byte[] b, int off, int len)
        throws IOException, NullPointerException,
            IndexOutOfBoundsException;
    public int skipBytes(int n) throws IOException;
    public boolean readBoolean() throws IOException;
    public byte readByte() throws IOException;
    public int readUnsignedByte() throws IOException;
    public short readShort() throws IOException;
    public int readUnsignedShort() throws IOException;
    public char readChar() throws IOException;
    public int readInt() throws IOException;
    public long readLong() throws IOException;
    public float readFloat() throws IOException;
    public double readDouble() throws IOException;
    public String readLine() throws IOException;
    public String readUTF() throws IOException;
}

一般的に,このインタフェースの中の読み込みルーチンは,期待する数のバイトを読み込む前にファイルの終わりに達すると,EOFException(IOException の一種)を投げる。 ファイルの終わり以外の理由で読み込みに失敗した場合は,EOFException ではなく IOExceptionを投げる。 特に,入力ストリームが閉じられている(22.3.6) 時には,IOExceptionを投げる。

22.1.1public void readFully(byte[] b)
throws IOException, NullPointerException;

readFully(b) は,入力ストリームからいくつかのバイトを読み,それをバッファ配列 b に格納する。 読まれたバイト数は,配列 b の長さに等しい。

このメソッドは,次のどれかの状態になるまでブロックする。

bnull ならば,NullPointerException を投げる。

b.length が0ならば,バイトは読み込まない。 そうでなければ,読み込んだ最初のバイトは,要素b[0]に,次のものは,b[1]にと順次格納する。

このメソッドから例外を投げた場合は,入力ストリームからのデータによって,bの全部ではなく一部が更新される可能性がある。

22.1.2 public void readFully(byte[] b, int off, int len)
throws IOException, NullPointerException,
IndexOutOfBoundsException

readFully(b, off, len) は,入力ストリームから lenバイト分を読み込む。

このメソッドは,次のいずれかの状態が発生するまでブロックする。

bnull ならば,NullPointerException を投げる。

off 若しくは len が負の数の時又はoff+len が配列 b の長さより大きい場合は,IndexOutOfBoundsException を投げる。

len が0の時,バイトは読み込まない。 そうでなければ,読み込んだ最初のバイトは,要素b[off]に,次のものは,b[off+1]にと順次格納する。 読み込まれるバイト数は,高々 len とする。

このメソッドから例外を投げた場合は,入力ストリームからのデータによって,b[off] から b[off+len-1]までの全部ではなく一部が更新される可能性がある。

22.1.3 public int skipBytes(int n) throws IOException

skipBytes は,入力ストリームからのデータを n バイト分スキップし,スキップしたバイト列を捨てる。 しかしながら, n より少ないバイト数をスキップするかもしれず,ゼロであることもあり得る。 これは,いくつかの状態から生じる。 n バイトをスキップする前にファイルの終わりに達することは,そのうちの一つの可能性である。 このメソッドは,決して EOFException を投げない。 実際にスキップしたバイト数を返す。

22.1.4 public boolean readBoolean() throws IOException

readBoolean は,1バイトを読み込み,そのバイトが非ゼロ値ならば true を返す。 そのバイトがゼロならば,false を返す。

このメソッドは,インタフェース DataOutput のメソッド writeBoolean (22.2.4)の出力を読み込むのに適している。

22.1.5 public byte readByte() throws IOException

readByte は,1バイトを読み込み,それを返す。 そのバイトは, -128 から 127 までの符合付きの値として扱われる。

このメソッドは,インタフェース DataOutput のメソッド writeByte (22.2.5)の出力を読み込むのに適している。

22.1.6 public int readUnsignedByte() throws IOException

readUnsignedByte は,1バイトを読み込み,型 int へのゼロ拡張を行い,その結果を返す。 結果は,0 から 255 までの範囲の値とする。

このメソッドは,インタフェース DataOutput のメソッド writeByte(22.2.5)に対する実引数が,0 から 255 までの範囲であるときの出力を読み込むのに適している。

22.1.7 public short readShort() throws IOException

readShort は,2バイトを読み込み,型 short の値を返す。 a を読み込んだ最初のバイト,b を2番目のバイトとすると,次の値を返す。

(short)((a << 8) | (b & 0xff))

このメソッドは,インタフェース DataOutput のメソッド writeShort (22.2.6)の出力を読み込むのに適している。

22.1.8 public int readUnsignedShort() throws IOException

readUnsignedShort は,2バイトを読み込み,0 から 65535 までの範囲の型 int の値を返す。 a を読み込んだ最初のバイト,b を2番目のバイトとすると,次の値を返す。

(((a & 0xff) << 8) | (b & 0xff))

このメソッドは,インタフェース DataOutput のメソッド writeShort(22.2.6)に対する実引数が,0 から 65535 までの範囲であるときの出力を読み込むのに適している。

22.1.9 public char readChar() throws IOException

readChar は,2バイトを読み込み,型 char の値を返す。 a を読み込んだ最初のバイト,b を2番目のバイトとすると,次の値を返す。

(char)((a << 8) | (b & 0xff))

このメソッドは,インタフェース DataOutput のメソッド writeChar (22.2.7) の出力を読み込むのに適している。

22.1.10 public int readInt() throws IOException

readInt は,4バイトを読み込み,型 int の値を返す。 aを読み込んだ最初のバイト,bを2番目のバイト,cを3番目のバイト,dを4番目のバイトとすると,次の値を返す。


(((a & 0xff) << 24) | ((b & 0xff) << 16) |
  ((c & 0xff) <<    8) | (d & 0xff))

このメソッドは,インタフェース DataOutput のメソッド writeInt (22.2.8) の出力を読み込むのに適している。

22.1.11 public long readLong() throws IOException

readLong は,8バイトを読み込み,型 long の値を返す。 aを読み込んだ最初のバイト,bを2番目のバイト,cを3番目のバイト,dを4番目のバイト,eを5番目のバイト,fを6番目のバイト,gを7番目のバイト,hを8番目のバイトとすると,次の値を返す。


(((long)(a & 0xff) << 56) |
  ((long)(b & 0xff) << 48) |
  ((long)(c & 0xff) <<  40) |
  ((long)(d & 0xff) << 32) |
  ((long)(e & 0xff) <<  24) |
  ((long)(f & 0xff) << 16) |
  ((long)(g & 0xff) <<   8) |
  ((long)(h & 0xff)))

このメソッドは,インタフェース DataOutput のメソッド writeLong (22.2.9)の出力を読み込むのに適している。

22.1.12 public float readFloat() throws IOException

readFloat は,4バイトを読み込み,型 float の値を返す。 まず始めに,型 int の値を,メソッド readInt (22.1.10) と同じ方法で作成し,メソッド Float.intBitsToFloat (20.9.23) と同じ方法で,この型 int の値を型 float の値に変換する。

このメソッドは,インタフェース DataOutput のメソッド writeFloat (22.2.10) の出力を読み込むのに適している。

22.1.13 public double readDouble() throws IOException

readDouble は,8バイトを読み込み,型 double の値を返す。 まず,メソッド readlong (22.1.11) と同じ方法で,型 long の値を作り,それを型 long から型 double へ,メソッド Double.longBitsToDouble (20.10.22) と同じ方法で変換する。

このメソッドは,インタフェース DataOutput のメソッド writeDouble (22.2.11) の出力を読み込むのに適している。

22.1.14 public String readLine() throws IOException

readLine は,連続したバイト列を読み込む。 それぞれのバイトを,改行又はファイルの終わりに達するまで,別々に文字に置き換え,読み込んだ文字を型 String の値として返す。 このメソッドは,バイトを処理するので,完全なUnicode文字セットをサポートしていないことに注意のこと。

1バイトも読み込まない以前に,ファイルの終わりに達すると,null を返す。 そうでなければ,読み込んだすべてのバイトをゼロ拡張し型 char に変換する。 "\n" を検出すると,それを捨てて読み込みを終了する。 "\r" を検出すると,それを捨て,その次のバイトが "\n" に変換されるならば,それも捨てる。 それから,読み込みを終了する。 "\n" 及び "\r" のいずれかを検出する前に,ファイルの終わりに達した場合は,そこで読み込みを終了する。 読み込みを終了すると,読み込んで捨てられなかったすべての文字を読み込んだ順に含む,型 String の値を返す。 この文字列中のすべての文字は,\u0100,つまり (char)256,未満の値をもつことに注意のこと。

22.1.15 public String readUTF() throws IOException

readUTF は,Java修正版UTF-8形式で符号化されたUnicode文字列表記を読み込み,この文字列を型 String として返す。

最初の2バイトを読み込み,メソッド readUnsignedShort (22.1.8)と同じ方法で,符号なしの16ビット整数を構築する。 この整数値は, UTF長(UTF length) と呼ばれ,あと何バイトを読み込まなければならないかを示す。 それから,これらのバイトは,それらをグループと考えることによって文字に変換される。 各グループの長さは,グループの最初のバイトの値によって計算する。 あるグループに続くバイトが,もしあれば,それは,次のグループの最初のバイトとする。

グループの最初のバイトが,ビットパターン 0xxxxxxx(ここで,xは,0又は1を意味する)に一致するならば,そのグループは,そのバイトだけから成る。 そのバイトは,文字を形成するためにゼロ拡張される。

グループの最初のバイトが,ビットパターン 110xxxxx に一致するならば,そのグループは,そのバイト a 及び2番目のバイト b から成る。 b がない場合(a が読み込んだバイトの最後の場合)又はb がビットパターン 10xxxxxxx に一致しない場合は,UTFDataFormatException を投げる。 そうでなければ,そのグループを,次の通り文字に変換する。

(char)(((a & 0x1F) << 6) | (b & 0x3F))

グループの最初のバイトが,ビットパターン 1110xxxx に一致するならば,そのグループは,そのバイト a 並びにもう二つのバイト b 及び c から成る。 c がない場合(a が,読み込んだバイトの最後の二つのどちらかの場合),又はb 若しくは c が,ビットパターン 10xxxxxx に一致しない場合は,UTFDataFormatException を投げる。 そうでなければ,そのグループを,次の通り文字に変換する。

(char)(((a & 0x0F) << 12) | ((b & 0x3F) << 6) | (c & 0x3F))

グループの最初のバイトが,ビットパターン 1111xxxx 又は10xxxxxx に一致する場合は,UTFDataFormatException を投げる。

この手順の途中でファイルの終わりを検出した場合は,EOFException を投げる。

この手順によって,すべてのグループを文字に変換した後に,関連するグループを入力ストリームから読み込んだ順番と同じ順番で,それらの文字を集めてStringを形成し,それを返す。

このメソッドによる読み込みに適しているデータを書き出すために,インタフェース DataOutput のメソッド writeUTF (22.2.14) を使用できる。

22.2 インタフェース java.io.DataOutput

DataOutput インタフェースは,任意のJavaのプリミティブ型を,バイト列に変換しバイナリストリームに書き出す。 String をJava修正版UTF-8形式に変換して書き出す機能ももつ。

DataOutput インタフェースが書き出したバイナリ出力からJavaのデータを読み込み,再構成するためには,DataInput インタフェースを用いる(22.1)

DataOutputインタフェースは,クラス DataOutputStream (22.21)及びクラス RandomAccessFile (22.23)で実装されている。

public interface DataOutput {
	public void write(int b) throws IOException;
	public void write(byte[] b)
		throws IOException, NullPointerException;
	public void write(byte[] b, int off, int len)
		throws IOException, NullPointerException,
			IndexOutOfBoundsException;
	public void writeBoolean(boolean v) throws IOException;
	public void writeByte(int v) throws IOException;
	public void writeShort(int v) throws IOException;
	public void writeChar(int v) throws IOException;
	public void writeInt(int v) throws IOException;
	public void writeLong(long v) throws IOException;
	public void writeFloat(float v) throws IOException;
	public void writeDouble(double v) throws IOException;
	public void writeBytes(String s)
		throws IOException, NullPointerException;
	public void writeChars(String s)
		throws IOException, NullPointerException;
	public void writeUTF(String s)
		throws IOException, NullPointerException;
}

このインタフェースの中のすべてのメソッドは,バイトを書き出すものとする。 一般的に,何らかの理由でバイトを書き出せない場合,IOException を投げる。

22.2.1 public void write(int b) throws IOException

write は,1バイトを出力ストリームに書き出す。書き出すバイトは,実引数 b の下位8ビットとする。 上位24ビットは,無視される。

22.2.2 public void write(byte[] b)
throws IOException, NullPointerException

write は,配列 b のバイト列をその順番に書き出す。

bnull ならば,NullPointerException を投げる。

b.length がゼロならば,書き出しを行わない。 そうでなければ,b[0] から順に,b[1]...b[b.length-1] を書き出す。

22.2.3 public void write(byte[] b, int off, int len)
throws IOException, NullPointerException, IndexOutOfBoundsException

write は,配列 blen バイトを出力ストリームに書き出す。

bnull ならば,NullPointerException を投げる。

off 若しくはlen が負のとき,又はoff+len が配列 b の長さより大きいときは,IndexOutOfBoundsException を投げる。

len がゼロならば,書き出しを行わない。 そうでなければ,b[off] から順に,b[off+1]...b[off+len-1] を書き出す。

22.2.4 public void writeBoolean(boolean v) throws IOException

writeBoolean は,1バイトを出力ストリームに書き出す。 実引数 vtrue ならば (byte)1 を, false ならば (byte)0 を書き出す。

このメソッドが書き出したバイトを,インタフェース DataInput のメソッド readBoolean (22.1.4)で読み込めば,v と等しい boolean の値を返す。

22.2.5 public void writeByte(int v) throws IOException

writeByte は,実引数の値から1バイトを出力ストリームに書き出す。 書き出すバイトは,実引数 b の下位8ビットとする。 上位24ビットは,無視する。 (writeByte は,write に一つの整数を実引数として与えたものと同じとする。)

このメソッドが書き出したバイトを,インタフェース DataInput のメソッド readByte (22.1.5) で読み込めば,(byte)v と等しい byte の値を返す。

22.2.6 public void writeShort(int v) throws IOException

writeShort は,この実引数の値を表すために2バイトを出力ストリームに書き出す。 書き出すバイトを順に次に示す。

(byte)(0xff & (v >> 8))
(byte)(0xff & v)

このメソッドが書き出したバイトを,インタフェース DataInput のメソッド readShort (22.1.7)で読み込めば,(short)v と等しい short の値を返す。

22.2.7 public void writeChar(int v) throws IOException

writeChar は,この実引数の値を表すために2バイトを出力ストリームに書き出す。 書き出すバイトを順に次に示す。

(byte)(0xff & (v >> 8)
(byte)(0xff & v)

このメソッドが書き出したバイトを,インタフェース DataInput のメソッド readChar (22.1.9) で読み込めば,(char)v と等しい char の値を返す。

22.2.8 public void writeInt(int v) throws IOException

writeInt は,この実引数の値を表すために4バイトを出力ストリームに書き出す。 書き出すバイトを順に次に示す。

(byte)(0xff & (v >> 24))
(byte)(0xff & (v >> 16))
(byte)(0xff & (v >>    8))
(byte)(0xff & v)

このメソッドが書き出したバイトを,インタフェース DataInput のメソッド readInt (22.1.10) で読み込めば,v と等しい int の値を返す。

22.2.9 public void writeLong(long v) throws IOException

writeLongは,この実引数の値を表すために8バイトを出力ストリームに書き出す。 書き出すバイトを順に次に示す。

(byte)(0xff & (v >> 56))
(byte)(0xff & (v >> 48))
(byte)(0xff & (v >> 40))
(byte)(0xff & (v >> 32))
(byte)(0xff & (v >> 24))
(byte)(0xff & (v >> 16))
(byte)(0xff & (v >>    8))
(byte)(0xff & v)

このメソッドが書き出したバイトを,インタフェース DataInput のメソッド readLong (22.1.11) で読み込めば,v と等しい long の値を返す。

22.2.10 public void writeFloat(float v) throws IOException

writeFloat は,この実引数の値を表すために4バイトを出力ストリームに書き出す。 まず,メソッド Float.floatToIntBits (20.9.22) と同じ方法で,float から int に変換する。 それから,その int の値をメソッド writeInt (22.2.8) と同じ方法で書き出す。

このメソッドが書き出したバイトを,インタフェース DataInput のメソッド readFloat (22.1.12) で読み込めば,v と等しい float の値を返す。

22.2.11 public void writeDouble(double v) throws IOException

writeDouble は,この実引数の値を表すために8バイトを出力ストリームに書き出す。まず,メソッド Double.doubleToLongBits (20.10.21) と同じ方法で,double から long へ変換する。 その long の値をメソッド writeLong (22.2.9) と同じ方法で書き出す。

このメソッドが書き出したバイトを,インタフェース DataInput のメソッド readDouble (22.1.13) で読み込めば,v と等しい double の値を返す。

22.2.12 public void writeBytes(String s)
throws IOException, NullPointerException

writeBytes は,文字列 s のそれぞれの文字をバイトに変換し,その順番に出力ストリームに書き出す。

snull ならば,NullPointerException を投げる。

s.length がゼロならば,書き出しを行わない。そうでなければ, s[0] から順に,s[1]...s[s.length-1] を書き出す。各文字毎にメソッド writeByte (22.2.5) と同じ方法で,下位の1バイトを書き出す。 上位の8ビットは,無視される。

22.2.13 public void writeChars(String s)
throws IOException, NullPointerException

writeChars は,文字列 s のそれぞれの文字を2バイトに変換し,その順番に出力ストリームに書き出す。

snull ならば,NullPointerException を投げる。

s.length がゼロならば,書き出しを行わない。そうでなければ,s[0] から順に,s[1]...s[s.length-1] を書き出す。各文字毎にメソッド writeChar (22.2.7) と同じ方法で,上位バイトを先に2バイトを書き出す。

22.2.14 public void writeUTF(String s)
throws IOException, NullPointerException

writeUTF は,文字列 s のそれぞれの文字を,次のJava修正版UTF表現の2バイトに変換し,その順番に出力ストリームに書き出す。

snull ならば,NullPointerException を投げる。

各文字を,その値によって,1〜3バイトのグループに変換する。

文字 c が, "\u0001" 以上 "\u007f" 以下の範囲ならば,次の順で1バイトで表現する。

(byte)c

文字 c が, "\u0000" 若しくは "\u0080" 以上 "\u07ff" 以下の範囲ならば,次の順で2バイトで表現する。


(byte)(0xc0 | (0x1f & (c >> 6)))
(byte)(0x80 | (0x3f & c))

文字 c が, "\u0800" 以上 "\uffff" 以下の範囲ならば,次の順で3バイトで表現する。


(byte)(0xc0 | (0x0f & (c >> 12)))
(byte)(0x80 | (0x3f & (c >>    6)))
(byte)(0x80 | (0x3f & c))

まず,s の文字を表現するの必要なバイト数を計算する。それが 65535 よりも大きい場合は,UTFDataFormatError を投げる。そうでなければ,その長さのバイト数をメソッド writeShort (22.2.6) と同じ方法で書き出す。文字列 s の各文字を,1〜3バイトの表現で書き出す。

このメソッドが書き出したバイトを,インタフェース DataInput のメソッド readUTF (22.1.15) で読み込めば,s と等しい String を返す。

22.3 クラス java.io.InputStream

入力ストリームは,いくつかのソースからバイトの入力を可能にする。


public abstract class InputStream {
    public abstract int read() throws IOException;
    public int read(byte[] b)
    throws IOException, NullPointerException;
    public int read(byte[] b, int off, int len)
        throws IOException, NullPointerException,
            IndexOutOfBoundsException;
    public long skip(long n) throws IOException;
    public int available() throws IOException;
    public void close() throws IOException;
    public void mark(int readlimit);
    public void reset() throws IOException;
    public boolean markSupported();
}

22.3.1 public abstract int read() throws IOException

read は,入力ストリームから1バイトを読み込む。 そのバイトを,0 から 255 の整数(0x00-0xff)として値を返す。 ストリームがファイルの終わりに到達すると,-1 を返す。

このメソッドは,データの入力が可能であるか,ファイルの終わりに到達するか,又は例外が投げられるまでブロックする。

ファイルの終り以外の何らかの理由でバイトを読み込めない場合,IOException を投げる。 特に,入力ストリームが閉じられている(22.3.6) 場合には,IOException を投げる。

22.3.2 public int read(byte[] b)
throws IOException, NullPointerException

read(b) は,数バイトを入力ストリームから読み込み,バッファ配列 b に格納する。正しく読み込んだバイト数を整数値で返す。

このメソッドは,データの入力が可能であるか,ファイルの終わりに到達するか,又は例外が投げられるまでブロックする。

bnull ならば,NullPointerException を投げる。

b の長さがゼロならば,読み込みを実行せずに 0 を返す。 そうでなければ,少なくとも1バイトの読込みを試みる。ストリームがファイルの終わりに達していて入力がなければ,-1 を返す。 そうでなければ,少なくとも1バイトを読み込み,b に格納する。

最初のバイトを,要素 b[0] に格納する。そして順に b[1]...に格納する。 読み込むバイト数は,高々 b の長さとする。 実際に読み込むバイト数を k とすると,これらのバイトを,b[0] から b[k-1] に格納する。 要素 b[k] から要素 b[b.length-1] には,影響を与えない。

ファイルの終り以外の何らかの理由でバイトを読み込めない場合,IOException を投げる。 特に,入力ストリームが閉じられている(22.15.5) 場合には,IOExceptionを投げる。

クラス InputStreamread(b) メソッドは,次の結果と同じとする。

read(b, 0, b.length)

22.3.3 public int read(byte[] b, int off, int len)
throws IOException, NullPointerException,
IndexOutOfBoundsException

read(b, off, len) は,数バイトを入力ストリームから読み込み,配列 b に格納する。 len バイトの読込みを試みるが,それより少ない数(ゼロもある)を読み込むことがある。それから,正しく読み込んだバイト数を整数値で返す。

このメソッドは,データの入力が可能であるか,ファイルの終わりに到達するか,又は例外が投げられるまでブロックする。

bnull ならば,NullPointerException を投げる。

off 若しくはlen が負のとき,又はoff+len が配列 b の長さより大きいときは,IndexOutOfBoundsException を投げる。

len がゼロならば,読み込みを実行せずに0 を返す。 そうでなければ,少なくとも1バイトの読込みを試みる。 ストリームがファイルの終わりに達していて入力がなければ,-1 を返す。 そうでなければ,少なくとも1バイトを読み込み,b に格納する。

最初のバイトを,要素 b[off] に格納する。 そして順に b[off+1]...に格納する。 読み込むバイト数は,高々 len とする。 実際に読み込むバイト数を k とすると,これらのバイトを,b[off] から b[off+k-1] に格納する。 要素 b[off+k] から要素 b[b.length-1] には,影響を与えない。

どんな場合でも,要素 b[0] から b[off-1] まで及び要素 b[off+len] から b[b.length-1] には,影響を与えない。

ファイルの終り以外の何らかの理由でバイトを読み込めない場合,IOException を投げる。 特に,入力ストリームが閉じられている (22.15.5) 場合には,IOExceptionを投げる。

クラス InputStream のメソッドread(b, off, len) は,単にread() を繰り返して呼ぶ。 最初の呼び出しで IOException が投げられると,その例外を,その呼出しからメソッドread(b, off, len) に返す。 その後の read() の呼び出しで IOException が投げられたときは,それを捕捉してファイルの終わりとして扱う。 それまでに読み込んだバイトを b に格納し,その例外が発生する前までに読み込んだバイト数を返す。

22.3.4 public long skip(long n) throws IOException

skip は,入力ストリームからのデータを n バイト分スキップする。 スキップしたバイト列は,捨てる。しかしながら,ゼロを含め,いくつか少ないバイト数をスキップすることがある。 これは,いくつかの状態から生じる。 n バイトをスキップする前にファイルの終わりに達することは,そのうちの一つの可能性である。 実際にスキップしたバイト数を返す。

22.3.5 public int available() throws IOException

available は,同一スレッド又は別のスレッドで,次の k バイトの読み込み又はスキップの呼び出しが,ブロック(入力データ待ち)せずに実行できるような,整数 k を返す。

クラス InputStream のメソッド available は,常に 0 を返す。

22.3.6 public int close() throws IOException

close は,入力ストリームを閉じる。閉じたストリームは,入力処理及び再び開くことはできない。

クラス InputStream のメソッド close は,何もせずにそのまま戻る。

22.3.7 public void mark(int readlimit)

メソッド markSupportedtrue を返すときに,ストリームは,何らかの方法によって mark が呼ばれた後に読み込まれたすべてのバイトを記憶しておき, メソッドresetが呼び出された時にはいつでも,それらの同じバイトを再び供給できるものとして準備する。 しかしながら,ストリームは,resetが呼び出される前に,readlimitバイトよりも多く読み込まれたすべてのバイトを記憶しておく必要はない。

クラス InputStream のメソッド mark は,何もしない。

22.3.8 public void reset() throws IOException

reset の役割は,次の通りとする。

クラス InputStream のメソッド reset は,常に IOException を投げる。

22.3.9 public boolean markSupported()

markSupportedtrue を返すならば,そのストリームは, mark (22.3.7) 及び reset (22.3.8) 処理を支援している。 すべての InputStream のインスタンスに対して,このメソッドは,呼び出されたときはいつでも,一貫して同じ真偽値を返さなければならない。

クラス InputStream のメソッド markSupported は,false を返す。

22.4 クラス java.io.FileInputStream

ファイル入力ストリームは,入力バイトをファイルシステム内のファイルから得る。 どんなファイルが有効かは,ホスト環境に依存する。

public class FileInputStream extends InputStream  {
    public FileInputStream(String path)
        throws SecurityException, FileNotFoundException;
    public FileInputStream(File file)
        throws SecurityException, FileNotFoundException;
    public FileInputStream(FileDescriptor fdObj)
        throws SecurityException;
    public native int read() throws IOException;
    public int read(byte[] b)
        throws IOException, NullPointerException;
    public int read(byte[] b, int off, int len)
        throws IOException, NullPointerException,
            IndexOutOfBoundsException;
    public native long skip(long n) throws IOException;
    public native int available() throws IOException;
    public native void close() throws IOException;
    public final FileDescriptor getFD() throws IOException;
    protected void finalize() throws IOException;
}

22.4.1 public FileInputStream(String path)
throws SecurityException, FileNotFoundException

このコンストラクタは,新しく生成した FileInputStream を,実際のファイルとの接続を開くことによって初期化する。 そのファイルは,ファイルシステム内のパス名によって指定される。 このファイル接続を表すために,新しい FileDescriptor オブジェクトを生成する。

まず,セキュリティマネージャが存在するならば,path 実引数をその実引数として,メソッド checkRead (20.17.19) を呼ぶ。

実際のファイルを開くことができなければ,FileNotFoundException を投げる。

22.4.2 public FileInputStream(File file)
throws SecurityException, FileNotFoundException

このコンストラクタは,新しく生成した FileInputStream を,実際のファイルとの接続を開くことによって初期化する。 そのファイルは,ファイルシステム内の File オブジェクトである file によって指定される。 このファイル接続を表すために,新しい FileDescriptor オブジェクトを生成する。

まず,セキュリティマネージャが存在するならば,file 実引数で表したパスをその実引数として,メソッド checkRead (20.17.19) を呼ぶ。

実際のファイルが開くことができなければ,FileNotFoundException を投げる。

22.4.3 public FileInputStream(FileDescriptor fdObj)
throws SecurityException

このコンストラクタは,ファイルデスクリプタ fdObj を使って,新しく生成した FileInputStream を初期化する。 fdObje は,ファイルシステム内の実際のファイルとの存在する接続を表す。

まず,セキュリティマネージャが存在するならば,fdObj 実引数をその実引数として,メソッド checkRead (20.17.18) を呼ぶ。

22.4.4 public final FileDescriptor getFD() throws IOException

このメソッドは,この FileInputStream で使用している,ファイルシステム内の実際のファイルとの接続を表す FileDescriptor オブジェクト (22.26) を返す。

22.4.5 public int read() throws IOException

このファイル入力ストリームが接続されている,実際のファイルから1バイトを読み込む。

InputStream の メソッド read (22.3.1) を実装する。

22.4.6 public int read(byte[] b)
throws IOException, NullPointerException

このファイル入力ストリームが接続されている,実際のファイルからバイト列を読み込む。

InputStream の メソッド read (22.3.2) を上書きする。

22.4.7 public int read(byte[] b, int off, int len)
throws IOException, NullPointerException, IndexOutOfBoundsException

このファイル入力ストリームが接続されている,実際のファイルからバイト列を読み込む。

InputStream の メソッド read (22.3.3) を上書きする。

22.4.8 public long skip(long n) throws IOException

このファイル入力ストリームが接続されている,実際のファイルからバイト列を読み込む。

InputStream の メソッド skip (22.3.4) を上書きする。

22.4.9 public int available() throws IOException

InputStream の メソッド available (22.3.5) を上書きする。

22.4.10 public void close() throws IOException

ファイル入力ストリームを閉じ,もはやバイト列の読み出しに使用されなくなる。

InputStream の メソッド close (22.3.6) を上書きする。

22.4.11 protected void finalize() throws IOException

FileInputStream は,実際のファイルとの接続を後始末するために,終了化を使用している。

22.5 クラス java.io.PipedInputStream

パイプ入力ストリームは,パイプ出力ストリームと接続しなければならない。 したがって,パイプ入力ストリームは,パイプ出力ストリームに書き出されるバイト列ならば何でも提供する。 典型的には,一つのスレッドが,PipedInputStream オブジェクトからデータを読み込み,他のあるスレッドが,対応する PipedOutputStream (22.17) へデータを書き出す。 両方のオブジェクトを単一のスレッドで使うことは,デッドロックになることがあるので推奨できない。 パイプ入力ストリームは,制限内で出力処理から入力処理を切り離しているバッファを含む。

public class PipedInputStream extends InputStream {
    public PipedInputStream(PipedOutputStream src)
        throws IOException;
    public PipedInputStream();
    public void connect(PipedOutputStream src)
        throws IOException;
    public int read() throws IOException;
    public int read(byte[] b, int off, int len) 
        throws IOException, NullPointerException,
            IndexOutOfBoundsException;
    public void close() throws IOException;
}

22.5.1 public PipedInputStream(PipedOutputStream src)
throws IOException

このコンストラクタは,新しく生成した PipedInputStream を,パイプ出力ストリームsrc と接続するものとして初期化する。 src に書き出されたデータは,このストリームの入力として利用可能になる。

22.5.2 public PipedInputStream()

このコンストラクタは,新しく生成した PipedInputStream を,まだ接続していないものとして初期化する。 使用する前に,PipedOutputStream に接続しなければならない。

22.5.3 public void connect(PipedOutputStream src)
throws IOException

メソッド connect は,このパイプ入力ストリームを,パイプ出力ストリームsrc に接続する。 このオブジェクトが既に他のパイプ出力ストリームに接続されているならば,IOException を投げる。

src が接続されていないパイプ出力ストリームであり,snk が接続されていないパイプ入力ストリームであるならば,それらは,次のいずれか一方の呼出しによって接続できる。

snk.connect(src)

又は,

src.connect(snk)

この二つの呼出しは,同じ効果をもつ。

22.5.4 public int read() throws IOException

一つのスレッドが,接続したパイプ出力ストリームにデータを供給していたが,既にそのスレッドが活動していない場合,IOException を投げる。

InputStream (22.3.1)のメソッド read を実装する。

22.5.5 public int read(byte[] b, int off, int len)
throws IOException, NullPointerException, IndexOutOfBoundsException

一つのスレッドが,接続したパイプ出力ストリームにデータを供給していたが,既にそのスレッドが活動していない場合,IOException を投げる。

InputStream の メソッド read (22.3.3)を上書きする。

22.5.6 public void close() throws IOException

このパイプ入力ストリームを閉じ,もはやバイト列の読み出しに使用されなくなる。

InputStream の メソッド close (22.3.6) を上書きする。

22.6 クラス java.io.ByteArrayInputStream

ByteArrayInputStream は,ストリームから読み込まれるバイト列を格納する内部バッファをもつ。 内部カウンタは,メソッド read が次に読むべきバイトの位置を保持する。 StringBufferInputStream (22.7)を参照のこと。

public class ByteArrayInputStream extends InputStream {
    protected byte[] buf;
    protected int pos;
    protected int count;
    public ByteArrayInputStream(byte[] buf);
    public ByteArrayInputStream(byte[] buf,
            int offset, int length);
    public int read()
        throws NullPointerException, IndexOutOfBoundsException;
    public int read(byte[] b, int off, int len)
        throws NullPointerException, IndexOutOfBoundsException;
    public long skip(long n);
    public int available();
    public void reset();
}

22.6.1 protected byte[] buf;

ストリームのクリエータによって提供されるバイト型配列。 要素 buf[0] から buf[count-1] が,そのストリームから読み込むことができるバイトとする。 要素 buf[pos] は,次に読むバイトとする。

22.6.2 protected int pos;

この値は,常に非負でありかつ count の値よりも大きくてはならない。 このストリームから次に読むバイトは, buf[pos] とする。

22.6.3 protected int count;

この値は,常に非負であり,buf の長さよりも大きくてはならない。 これは,このストリームからこれまでに読まれた buf 内の最後のバイトよりも1大きい。

22.6.4 public ByteArrayInputStream(byte[] buf)

このコンストラクタは,新たに生成された ByteArrayInputStream を,buf をそのバッファ配列として使用するために初期化する。 pos の初期値は,0 であり,count の初期値は, buf の長さとする。

22.6.5 public ByteArrayInputStream(byte[] buf,
int offset, int length)

このコンストラクタは,新たに生成された ByteArrayInputStreamを,bufをそのバッファ配列として使用するために初期化する。 pos の初期値は,offsetであり,count の初期値は,offset+len とする。

結果として生成された入力ストリームから単純にバイト列を読むのであれば,要素 buf[pos] から buf[pos+len-1] が読み込まれるが,reset 操作(22.6.10)を実行すると,バイト列 buf[0] から buf[pos-1] が入力として利用可能になることに注意のこと。

22.6.6 public int read()
throws NullPointerException, IndexOutOfBoundsException

poscount と等しければ,ファイルの終りを示すために -1 を返す。 そうでなければ,値 buf[pos]&0xff を返す。 戻る直前に pos を, 1 増加させる。

InputStream のメソッド read (22.3.1)を実装する。

22.6.7 public int read(byte[] b, int off, int len)
throws NullPointerException, IndexOutOfBoundsException

poscount と等しければ,ファイルの終りを示すために -1 を返す。 そうでなければ,読み込んだバイト数 k は, len 又は count-pos の小さいほうに等しい。 k が正であれば, buf[pos] から buf[pos+k-1] のバイトを System.arraycopy(20.18.16)と同じ方法で b[off] から b[off+k-1] に複写する。 値 kpos に加算し,k を返す。

InputStreamread(22.3.3)を上書きする。

22.6.8 public long skip(long n)

実際にスキップされるバイト数 k は, n 又は count-pos の小さいほうに等しい。 値 kpos に加算し,k を返す。

InputStreamskip(22.3.4)を上書きする。

22.6.9 public int available()

count-pos の値を返す。

InputStreamavailable(22.3.5)を上書きする。

22.6.10 public void reset()

pos の値を 0 にする。

InputStream のメソッド reset(22.3.8)を上書きする。

22.7 クラス java.io.StringBufferInputStream

StringBufferInputStream は,そのストリームから読み込まれるバイト列を格納する内部バッファをもつ。 ある内部カウンタが,メソッド read によって供給される次のバイトの位置を保持する。 ByteArrayInputStream (22.6)を参照のこと。

public class StringBufferInputStream extends InputStream {
    protected String buffer;
    protected int pos;
    protected int count;
    public StringBufferInputStream(String s)
        throws NullPointerException;
    public int read();
    public int read(byte[] b, int off, int len)
        throws NullPointerException, IndexOutOfBoundsException;
    public long skip(long n);
    public int available();
    public void reset();
}

StringBufferInputStream から読み込まれるバイト列は,文字列中の文字一つ一つの下位8ビットであり,上位8ビットは,無視されることに注意のこと。

22.7.1 protected String buffer;

そのストリームのクリエータによって提供されるString とする。 要素 buffer[0] から buffer[count-1] がこれまでに読み込むことができたバイトとする。 要素 buffer[pos] は,次に読むバイトとする。

22.7.2 protected int pos;

この値は,常に非負でありかつ count の値よりも大きくてはならない。 このストリームから次に読み込まれるバイトは, buffer[pos] とする。

22.7.3 protected int count;

この値は, buffer の長さに等しい。 それは,このストリームから読み込むことができる buffer 内のデータのバイト数とする。

22.7.4 public StringBufferInputStream(String s)
throws NullPointerException

このコンストラクタは,新たに生成された StringBufferInputStream を,s をバッファ配列として使用するために初期化する。 pos の初期値は,0であり,countの初期値は,bufferの長さとする。

22.7.5 public int read()

poscount と等しければ,ファイルの終りを示すために -1 を返す。 そうでなければ,値 buffer[pos]&0xff を返す。 戻る直前に pos は, 1 増加させる。

InputStream のメソッド read (22.3.1)を実装する。

22.7.6 public int read(byte[] b, int off, int len)
throws NullPointerException, IndexOutOfBoundsException

poscount と等しければ,ファイルの終りを示すために -1 を返す。 そうでなければ,読み込んだバイト数 k は, len 又は count-pos の小さいほうに等しい。 k が正であれば buffer[pos] から b[off+k-1] のバイト列を System.arraycopy(20.18.16)と同じ方法で b[off] から buffer[pos+k-1] に複写する。 値 kpos に加算し,k を返す。

InputStreamread(22.3.3)メソッドを上書きする。

22.7.7 public long skip(long n)

実際にスキップされるバイト数 k は, n 又は count-pos の小さいほうに等しい。 値 k に, pos を加算し,k を返す。

InputStreamskip(22.3.4)メソッドを上書きする。

22.7.8 public int available()

count-pos の値を返す。

InputStreamavailable(22.3.5)メソッドを上書きする。

22.7.9 public void reset()

pos の値を 0 にする。

InputStream のメソッド reset(22.3.8) を上書きする。

22.8 クラス java.io.SequenceInputStream

SequenceInputStream は,複数の入力ストリームの論理的な結合を表現する。 順序付けられた入力ストリームの集合から始まり,最初のストリームからファイルの終わりに達するまでを読み込む。 その次に2番目のストリーム,そしてまたその次と,含まれる入力ストリームの最後のファイルの終わりに達するまで読み込む。

public class SequenceInputStream extends InputStream {
    public SequenceInputStream(Enumeration e);
    public SequenceInputStream(InputStream s1, InputStream s2);
    public int read() throws IOException;
    public int read(byte[] buf, int pos, int len)
        throws IOException, NullPointerException,
            IndexOutOfBoundsException;
    public void close() throws IOException;
}

22.8.1 public SequenceInputStream(Enumeration e)

このコンストラクタは,新たに生成された SequenceInputStreamを,その実引数を記憶することによって初期化する。 この実引数は,実行時の型が InputStream(22.3)となるオブジェクトを生成するEnumeration(21.1)でなければならない。 Enumeration によって生成される入力ストリームが,このSequenceInputStreamが読み込むバイト列を供給するために,順に読み込まれる。 Enumeration の各入力ストリームに読み込むべきバイトがなくなると,メソッド close を呼び出すことによってクローズする。

22.8.2 public SequenceInputStream(InputStream s1,
InputStream s2)

このコンストラクタは,新たに生成された SequenceInputStreamを,二つの実引数を記憶することによって初期化する。 これらは,この SequenceInputStream から読み込むバイト列を提供するために,最初に s1 ,次に s2 と順に読み込まれる。

22.8.3 public int read() throws IOException

InputStreamread(22.3.1)を実装する。

22.8.4 public int read(byte[] buf, int pos, int len)
throws IOException, NullPointerException, IndexOutOfBoundsException

InputStreamread(22.3.3)を上書きする。

22.8.5 public void close() throws IOException

この SequenceInputStreamをクローズする。 クローズされた SequenceInputStream は,入力操作を行うことも再びオープンすることもできない。

このストリームが Enumeration から生成されている場合は,そのEnumerationから要求されいるすべての残りの要素は,メソッド close が戻る前にクローズされる。

InputStreamclose(22.3.6)を上書きする。

22.9 クラス java.io.FilterInputStream

FilterInputStreamは,基本的なデータの入力源として使用するある別の入力ストリームを含んでおり,そのデータを一定の方法で加工したり,付加的な機能を提供したりする。 FilterInputStream自体は,InputStreamのすべてのメソッドを,すべての要求を自らが保持する入力ストリームに転送するだけのメソッドで,単に上書きしているだけである。 FilterInputStreamのサブクラスは,これらのメソッドのいくつかをさらに上書きしてもよいし,メソッド又はフィールドを追加してもよい。

public class FilterInputStream extends InputStream {
    protected InputStream in;
    protected FilterInputStream(InputStream in);
    public int read() throws IOException;
    public int read(byte[] b)
        throws IOException, NullPointerException;
    public int read(byte[] b, int off, int len)
        throws IOException, NullPointerException,
            IndexOutOfBoundsException;
    public long skip(long n) throws IOException;
    public int available() throws IOException;
    public void close() throws IOException;
    public void mark(int readlimit);
    public void reset() throws IOException;
    public boolean markSupported();
}

22.9.1 protected InputStream in;

フィルタされる入力ストリームとする。

22.9.2 protected FilterInputStream(InputStream in)

このコンストラクタは,新たに生成された FilterInputStreamを実引数 inを後で使用を可能にするために,this.in フィールドに代入することによって初期化する。

22.9.3 public int read() throws IOException

このメソッドは,単に in.read() を実行し,その結果を返す。

InputStreamread(22.3.1)を実装する。

22.9.4 public int read(byte[] b)
throws IOException, NullPointerException

このメソッドは,単に呼出し read(b, 0, b.length) を実行し,その結果を返す。 in.read(b)の代わりを実行 するのではない という点が重要である。 FilterInputStream の,あるサブクラスは,実際に使用されている実装の方針に依存する。

InputStream のメソッド read(22.3.2)を上書きする。

22.9.5 public int read(byte[] b, int off, int len)
throws IOException, NullPointerException, IndexOutOfBoundsException

このメソッドは,単に in.read(b, off, len) を実行し,その結果を返す。

InputStreamread(22.3.3)を上書きする。

22.9.6 public long skip(long n) throws IOException

このメソッドは,単に in.skip() を実行し,その結果を返す。

InputStreamskip(22.3.4)を上書きする。

22.9.7 public int available() throws IOException

このメソッドは,単に in.available() を実行し,その結果を返す。

InputStreamavailable(22.3.5)を上書きする。

22.9.8 public void close() throws IOException

このメソッドは,単に in.close()を実行し,その結果を返す。

InputStreamclose(22.3.6)を上書きする。

22.9.9 public void mark(int readlimit)

このメソッドは,単に in.mark() を実行し,その結果を返す。

InputStreammark(22.3.7)を上書きする。

22.9.10 public void reset() throws IOException

このメソッドは,単に in.reset() を実行し,その結果を返す。

InputStreamreset(22.3.8)を上書きする。

22.9.11 public boolean markSupported()

このメソッドは,単に in.markSupported() を実行し,その結果を返す。

InputStreammarkSupported(22.3.9)を上書きする。

22.10 クラス java.io.BufferedInputStream

BufferedInputStream は,他の入力ストリームに機能,つまり,入力を バッファリングする能力並びにメソッドmark 及びreset を支援する能力を追加する。 BufferedInputStream が生成されるときに,内部的なバッファ配列が生成される。 そのストリームからバイトが読み込み又はスキップされた時,内部的なバッファは,それに含まれる入力ストリームから必要に応じて補充される,一度に多くのバイトが補充される。 mark 操作は,入力ストリームの中の位置を記憶し,reset 操作は,最も最近に実行した mark 操作後に読み込まれたすべてのバイトが,含まれる入力ストリームから新たなバイトが読まれる前に,再度読み込まれるものとする。

public class BufferedInputStream extends FilterInputStream {
    protected byte[] buf;
    protected int count = 0;
    protected int pos = 0;
    protected int markpos = -1;
    protected int marklimit = 0;
    public BufferedInputStream(InputStream in);
    public BufferedInputStream(InputStream in, int size);
    public int read() throws IOException;
    public int read(byte[] b)
        throws IOException, NullPointerException;
    public int read(byte[] b, int off, int len)
        throws IOException, NullPointerException,
            IndexOutOfBoundsException;
    public long skip(long n) throws IOException;
    public int available() throws IOException;
    public void mark(int readlimit);
    public void reset() throws IOException;
    public boolean markSupported();
}

22.10.1 protected byte[] buf;

内部バッファ配列とする。 必要に応じてサイズの異なる他の配列によって置き換えられる場合がある。

22.10.2 protected int count = 0;

この値は,常に 0 から buf.length の範囲にある。 要素 buf[0] から buf[count-1] が,入力ストリームから読み込んだバッファリングされている入力データを保持している。

22.10.3 protected int pos = 0;

この値は,常に 0 から count の範囲にある。 この値が count よりも小さいならば,buf[pos] が入力として供給される次のバイトとする。 count に等しい場合は,次の read 又は skip 操作は,読み込む次のバイトを含まれる入力ストリームから要求する。

22.10.4 protected int markpos = -1;

この値は,常に -1 から pos の範囲にある。 入力ストリームにマーク付けされた位置がない場合には,この値は -1 とする。 入力ストリームにマーク付けされた位置がある場合には, buf[markpos]reset 操作後に入力として供給される最初のバイトとする。 markpos-1 でない場合, buf[markpos] から buf[pos-1] までのすべてのバイトは,バッファ配列の中に保持されていなければならない (countpos, 及び markpos の値に対する適切な調整を伴って,バッファ配列中の別の場所に移動している可能性はある)。 これらのバイトは,pos 及び markpos の差が marklimitを超えない限り及び超えるまでは,廃棄してはならない。

22.10.5 protected int marklimit;

pos 及び markpos の差が marklimit を超える場合にはいつでも,markpos-1 に設定してマークを消してもよい。

22.10.6 public BufferedInputStream(InputStream in)

このコンストラクタは,新たに生成された BufferedInputStream を,後の使用に備えて,その実引数である入力ストリーム in を保存することによって初期化する。 内部バッファ配列を生成し,buf に格納する。

22.10.7 public BufferedInputStream(InputStream in, int size)

このコンストラクタは,新たに生成された BufferedInputStream を,後の使用に備えて,その実引数である入力ストリーム in を保存するすることによって初期化する。 長さ size の内部バッファ配列を生成し,buf に格納する。

22.10.8 public int read() throws IOException

InputStream のメソッド read(22.3.1)を参照のこと。

FilterInputStream のメソッド read(22.9.3)を上書きする。

22.10.9 public int read(byte[] b)
throws IOException, NullPointerException

InputStream のメソッド read(22.3.2)を参照のこと。

FilterInputStream のメソッド read(22.9.4)を上書きする。

22.10.10 public int read(byte[] b, int off, int len)
throws IOException, NullPointerException, IndexOutOfBoundsException

InputStream のメソッド read(22.3.3)を参照のこと。

FilterInputStream のメソッド read(22.9.5)を上書きする。

22.10.11 public long skip(long n) throws IOException

InputStream のメソッド skip(22.3.4)を参照のこと。

FilterInputStream のメソッド skip(22.9.6)を上書きする。

22.10.12 public int available() throws IOException

InputStream のメソッド available(22.3.5)を参照のこと。

FilterInputStream のメソッド available(22.9.7)を上書きする。

22.10.13 public void mark(int readlimit)

フィールド marklimitを実引数の値に設定し, markpospos の値に設定する。

FilterInputStream のメソッド mark(22.9.9)を上書きする。

22.10.14 public void reset() throws IOException

InputStream のメソッド reset の一般的な規則(22.3.8)を参照のこと。

markpos-1 であれば(マークされていない,あるいは,マークが無効になった場合),IOException を投げる。 そうでなければ,posmarkpos と同じ値に設定する。

FilterInputStream のメソッド reset(22.9.10)を上書きする。

22.10.15 public boolean markSupported()

このメソッドは, true を返す ( BufferedInputStream は,常に mark を支援する)。

FilterInputStreammarkSupported(22.9.11)メソッドを上書きする。

22.11 クラス java.io.DataInputStream

データ入力ストリームは,入力源からバイト列を読み,特定の文字の並びを,さまざまな型のデータを表現するものとして解釈する機能を提供する。

public class DataInputStream extends FilterInputStream
        implements DataInput {
    public DataInputStream(InputStream in);
    public final void readFully(byte[] b)
        throws IOException, NullPointerException;
    public final void readFully(byte[] b, int off, int len)
        throws IOException, NullPointerException,
            IndexOutOfBoundsException;
    public final int skipBytes(int n) throws IOException;
    public final boolean readBoolean() throws IOException;
    public final byte readByte() throws IOException;
    public final int readUnsignedByte() throws IOException;
    public final short readShort() throws IOException;
    public final int readUnsignedShort() throws IOException;
    public final char readChar() throws IOException;
    public final int readInt() throws IOException;
    public final long readLong() throws IOException;
    public final float readFloat() throws IOException;
    public final double readDouble() throws IOException;
    public final String readLine() throws IOException;
    public final String readUTF() throws IOException;
    public final static String readUTF(DataInput in)
        throws IOException;
}

22.11.1 public DataInputStream(InputStream in)

このコンストラクタは,新たに生成したDataInputStream を,後の使用に備えて,その実引数である入力ストリーム in を保存することによって初期化する。

22.11.2 public final void readFully(byte[] b)
throws IOException, NullPointerException

DataInput のメソッド readFully の一般的な規則(22.1.1)を参照のこと。

この操作の対象となるバイト列は,含まれる入力ストリームから読み込まれる。

22.11.3 public final void readFully(byte[] b, int off, int len)
throws IOException, NullPointerException, IndexOutOfBoundsException

DataInput のメソッド readFully の一般的な規則(22.1.2)を参照のこと。

この操作の対象となるバイト列は,含まれる入力ストリームから読み込まれる。

22.11.4 public final int skipBytes(int n) throws IOException

DataInput のメソッド skipBytes の一般的な規則(22.1.3)を参照のこと。

この操作の対象となるバイト列は,含まれる入力ストリームから読み込まれる。

22.11.5 public final boolean readBoolean() throws IOException

DataInput のメソッド readBoolean の一般的な規則(22.1.4)を参照のこと。

この操作の対象となるバイト列は,含まれる入力ストリームから読み込まれる。

22.11.6 public final byte readByte() throws IOException

DataInput のメソッド readByte の一般的な規則(22.1.5)を参照のこと。

この操作の対象となるバイト列は,含まれる入力ストリームから読み込まれる。

22.11.7 public final int readUnsignedByte() throws IOException

DataInput のメソッド readUnsignedByte の一般的な規則(22.1.6)を参照のこと。

この操作の対象となるバイト列は,含まれる入力ストリームから読み込まれる。

22.11.8 public final short readShort() throws IOException

DataInput のメソッド readShort の一般的な規則(22.1.7)を参照のこと。

この操作の対象となるバイト列は,含まれる入力ストリームから読み込まれる。

22.11.9 public final int readUnsignedShort() throws IOException

DataInput のメソッド readUnsignedShort の一般的な規則(22.1.8)を参照のこと。

この操作の対象となるバイト列は,含まれる入力ストリームから読み込まれる。

22.11.10 public final char readChar() throws IOException

DataInput のメソッド readChar の一般的な規則(22.1.9)を参照のこと。

この操作の対象となるバイト列は,含まれる入力ストリームから読み込まれる。

22.11.11 public final int readInt() throws IOException

DataInput のメソッド readInt の一般的な規則(22.1.10)を参照のこと。

この操作の対象となるバイト列は,含まれる入力ストリームから読み込まれる。

22.11.12 public final long readLong() throws IOException

DataInput のメソッド readLong の一般的な規則(22.1.11)を参照のこと。

この操作の対象となるバイト列は,含まれる入力ストリームから読み込まれる。

22.11.13 public final float readFloat() throws IOException

DataInput のメソッド readFloat の一般的な規則(22.1.12)を参照のこと。

この操作の対象となるバイト列は,含まれる入力ストリームから読み込まれる。

22.11.14 public final double readDouble() throws IOException

DataInput のメソッド readDouble の一般的な規則(22.1.13)を参照のこと。

この操作の対象となるバイト列は,含まれる入力ストリームから読み込まれる。

22.11.15 public final String readLine() throws IOException

DataInput のメソッド readLine の一般的な規則(22.1.14)を参照のこと。

この操作の対象となるバイト列は,含まれる入力ストリームから読み込まれる。

22.11.16 public final String readUTF() throws IOException

DataInput のメソッド readUTF の一般的な規則(22.1.15)を参照のこと。

この操作の対象となるバイト列は,含まれる入力ストリームから読み込まれる。

22.11.17 public final static String readUTF(DataInput in)
throws IOException

メソッド readUTF は,ストリーム in からJava修正版UTF-8 形式でエンコードされたUnicodeの文字列表現を読み込む。 それから,この文字列を String として返す。 修正版のUTF-8表現の詳細は, DataInput のメソッド readUTF(22.1.15)のものと同じとする。

22.12 クラス java.io.LineNumberInputStream

LineNumberInputStream は,他の入力ストリームに行数を数える機能を追加する。 LineNumberInputStream の生成時には,行番号カウンタをゼロに設定する。 ストリームからバイト列を読み込み又はスキップするときに,改行記号(\n\r,又は\r\n)が出現するたびにカウンタを増加させる。 同時に該当する改行記号を,単一の文字 "\n" に変換する。 メソッド getLineNumber は,カウンタの現在の値を返し,メソッド setLineNumber は,カウンタを与えられた値に設定する。 含まれる入力ストリームが mark 操作を支援している場合は,LineNumberInputStreammark 操作を支援する。 mark操作は,行番号カウンタを記憶しておき, reset 操作は, mark 操作で記憶した値にカウンタを設定する。

public class LineNumberInputStream extends FilterInputStream {
    public LineNumberInputStream(InputStream in);
    public int read() throws IOException;
    public int read(byte[] b)
        throws IOException, NullPointerException;
    public int read(byte[] b, int off, int len)
        throws IOException, NullPointerException,
            IndexOutOfBoundsException;
    public long skip(long n) throws IOException;
    public int available() throws IOException;
    public void mark(int readlimit);
    public void reset() throws IOException;
    public int getLineNumber();
    public void setLineNumber(int lineNumber);
}

22.12.1 public LineNumberInputStream(InputStream in)

このコンストラクタは,LineNumberInputStreamを新たに生成し,後の使用に備えて,その実引数である入力ストリームinを保存することによって初期化する。

22.12.2 public int read() throws IOException

InputStream のメソッドreadの一般的な規則(22.3.1)を参照のこと。

含まれる入力ストリームからバイト列を読み込む際に,改行記号を認識し,カウントする。 含まれる入力ストリーム中の各改行記号に対しては,単一の文字 "\n" を返す。

FilterInputStream のメソッド read(22.9.3)を上書きする。

22.12.3 public int read(byte[] b)
throws IOException, NullPointerException

InputStream のメソッド read の一般的な規則(22.3.2)を参照のこと。

含まれる入力ストリームからバイト列を読み込む際に,改行記号を認識し,カウントする。 含まれる入力ストリーム中の各改行記号に対しては,単一の文字 "\n" を返す。

FilterInputStream のメソッド read(22.9.4)を上書きする。

22.12.4 public int read(byte[] b, int off, int len)
throws IOException, NullPointerException, IndexOutOfBoundsException

InputStream のメソッドreadの一般的な規則(22.3.3)を参照のこと。

含まれる入力ストリームからバイト列を読み込む際に,改行記号を認識し,カウントする。 含まれる入力ストリーム中の各改行記号に対しては,単一の文字 "\n" を返す。

FilterInputStream のメソッドread(22.9.5)を上書きする。

22.12.5 public long skip(long n) throws IOException

InputStream のメソッド skip の一般的な規則(22.3.4)を参照のこと。

含まれる入力ストリームからバイト列を読み込む際に改行記号を認識し,カウントする。 含まれる入力ストリーム中で認識した各々の改行記号は,たとえそれが列 \r\nであっても1バイトスキップしたものとみなす。

FilterInputStream のメソッド skip(22.9.6)を上書きする。

22.12.6 public int available() throws IOException

InputStream のメソッド available の一般的な規則(22.3.5)を参照のこと。

含まれる入力ストリームが k 個の入力文字をブロックせずに供給できるとしても,LineNumberInputStream がブロックせずに供給できることを保証できるのは,文字でしかないことに注意のこと。 その理由は,入力ストリームに含まれるk 個の文字は,個の \r\n の組から構成されている可能性があり,これらは,個の "\n" に変換されるからである。

FilterInputStream のメソッド available(22.9.7)を上書きする。

22.12.7 public void mark(int readlimit)

InputStream のメソッド mark の一般的な規則(22.3.7)を参照のこと。

入力ストリーム中のある位置にマークを付け,将来のgetLineNumber(22.12.9)の返却値として,現在の行番号を記憶する。

FilterInputStream のメソッド mark(22.9.9)を上書きする。

22.12.8 public void reset() throws IOException

InputStream のメソッド reset の一般的な規則(22.3.8)を参照のこと。

入力ストリームを以前の位置にリセットし,行番号を過去にマークされたときの値にリセットする。

FilterInputStream のメソッド reset(22.9.10)を上書きする。

22.12.9 public int getLineNumber()

現在の行番号を返す。 この値は,次の3種類の事象のどれかが最後に発生した時点から検出した改行記号の数 k によって決まる。

このルールに従えば, 最初の行の文字が読み込まれる際には,現在の行番号は, 0 とし,最初の行の改行文字が読み込まれた後には, 1 とする。

22.12.10 public void setLineNumber(int lineNumber)

現在の行番号を,実引数と同じ値に設定する。

22.13 クラス java.io.PushbackInputStream

PushbackInputStream は,他の入力ストリームに1バイトをプッシュバック又はアンリードする機能を追加する。 これは,あるコード中で,特定のバイト値によって区切られるがそのバイト数は事前にわからないデータを読む場合に有用である。 つまり,終端バイトを読んだ後,コードは, 入力ストリームからの次のread操作がプッシュバックされたバイトを再び読み込み,それを“アンリード”することができる。 例えば,識別子を構成する文字列は,演算子文字を表すバイトによって区切られる場合がある。 識別子を読むことだけが仕事であるメソッドは,演算子に出会うまで読み込み,その演算子を再読み込みできるものとしてプッシュバックすることができる。

public class PushbackInputStream extends FilterInputStream {
    protected int     pushBack = -1;
    public PushbackInputStream(InputStream in);
    public int read() throws IOException;
    public int read(byte[] bytes, int offset, int length)
        throws IOException, NullPointerException,
            IndexOutOfBoundsException;
    public void unread(int ch) throws IOException;
    public int available() throws IOException;
    public boolean markSupported();
}

22.13.1 protected int pushBack = -1;

このフィールドが非負の値である場合,それは,プッシュバックされたバイトとする。 このフィールドが -1 の場合は,現在プッシュバックされたバイトは ない。

22.13.2 public PushbackInputStream(InputStream in)

このコンストラクタは,新たに生成したPushbackInputStream を,後の使用に備えて,その実引数の入力ストリーム in を保存することによって初期化する。 初期状態では,ブッシュバックされたバイトはない(フィールド pushBack は,-1 に初期化される)。

22.13.3 public int read() throws IOException

InputStream のメソッド read の一般的な規則(22.3.1)を参照のこと。

pushBack-1 でないならば,pushBack の値を返し,pushBackを,-1 に設定する。 そうでなければ,含まれる入力ストリームから1バイトを読み込む。

FilterInputStream のメソッド read(22.9.3)を上書きする。

22.13.4 public int read(byte[] bytes, int offset, int length) throws IOException, NullPointerException, IndexOutOfBoundsException

InputStream のメソッド read の一般的な規則(22.3.3)を参照のこと。

pushBack-1 でないならば,含まれる入力ストリームからバイト列を読み込む前に,それを入力バイトとして使用する(pushBack を,-1 に設定する)。

FilterInputStream のメソッド read(22.9.5)を上書きする。

22.13.5 public void unread(int b) throws IOException

pushBack-1 でないならば IOException を投げる(1バイト以上をプッシュバックすることが許されていなければ)。そうでない場合は, bpushBack に代入してバイト値 b をプッシュバックする。

22.13.6 public int available() throws IOException

InputStream のメソッド available の一般的な規則(22.3.1)を参照のこと。

このメソッドは,最初に含まれる入力ストリームのメソッド available を呼ぶ。 pushBack-1 ならば,その結果を返す。 そうでなければ,その結果に 1 を加えた値を返す。

FilterInputStreamavailable(22.9.7)メソッドを上書きする。

22.13.7 public boolean markSupported()

このメソッドは, false を返す(PushbackInputStream は, mark を支援しない)。

22.14 クラス java.io.StreamTokenizer

StreamTokenizer は,ある入力ストリームを取り,それを“トークン”に解析分割し,トークンを一度に一つ読むことができるものとする。 この解析分割のプロセスは,さまざまな状態に設定できるテーブル及びいくつかのフラグによって制御され,識別子,数字,引用された文字列及び注釈を標準の様式で認識することができる。

public class StreamTokenizer {
    public static final int TT_EOF = -1;
    public static final int TT_EOL = '\n';
    public static final int TT_NUMBER = -2;
    public static final int TT_WORD = -3;
    public int ttype;
    public String sval;
    public double nval;
    public StreamTokenizer(InputStream in);
    public void resetSyntax();
    public void wordChars(int low, int hi);
    public void whitespaceChars(int low, int hi);
    public void ordinaryChars(int low, int hi);
    public void ordinaryChar(int ch);
    public void commentChar(int ch);
    public void quoteChar(int ch);
    public void parseNumbers();
    public void eolIsSignificant(boolean flag);
    public void slashStarComments(boolean flag);
    public void slashSlashComments(boolean flag);
    public void lowerCaseMode(boolean flag);
    public int nextToken() throws IOException;
    public void pushBack();
    public int lineno();
    public String toString();
}

入力ストリームから読まれるおのおののバイトは, "\u0000" から "\u00FF" の範囲の文字と見なされる。 文字の値は,文字の五つの可能な属性,すなわち空白類,アルファベット,数値,引用文字列及び注釈を見出すために用いられる(一つの文字が,これらの属性のうちの一つ以上をもつことがあり,又は一つももたないこともある)。 加えて,改行をトークンとして認識するかどうか,// で始まるJavaスタイルの行終端注釈を認識し読み飛ばすかどうか,/* 及び */ で定義される“伝統的な”Javaスタイルの注釈を認識し読み飛ばすかどうか,を制御する三つのフラグが存在する。 もう一つのフラグは,識別子のすべての文字を英小文字に変換するかどうかを制御する。

ここに, StreamTokenizer の簡単な使用例を示す。 次のコードは,単に標準入力ストリームの中のトークンを読み,それぞれの識別結果を出力しているだけである。 行番号の変化も又表示する。

import java.io.StreamTokenizer;
import java.io.IOException;
class Tok {
    public static void main(String[] args) {
        StreamTokenizer st = new StreamTokenizer(System.in);
        st.ordinaryChar('/');
        int lineNum = -1;
        try {
            for (int tokenType = st.nextToken();
                    tokenType != StreamTokenizer.TT_EOF;
                    tokenType = st.nextToken()) {
                int newLineNum = st.lineno();
                if (newLineNum != lineNum) {
                    System.out.println("[line " + newLineNum
                                            + "]");
                    lineNum = newLineNum;
                }
                switch(tokenType) {
                case StreamTokenizer.TT_NUMBER:
                    System.out.println("the number " + st.nval);
                    break;
                case StreamTokenizer.TT_WORD:
                    System.out.println("identifier " + st.sval);
                    break;
                default:
                    System.out.println("  operator "
                                            + (char)tokenType);
                }
            }
        } catch (IOException e) {
            System.out.println("I/O failure");
        }
    }
}

入力ストリーム が,このデータを含んでいるならば,

10 LET A = 4.5
20 LET B = A*A
30 PRINT A, B

この時,結果の出力は,次の通りとする。

[line 1]
the number 10.0
identifier LET
identifier A
  operator =
the number 4.5
[line 2]
the number 20.0
identifier LET
identifier B
  operator =
identifier A
  operator *
identifier A
[line 3]
the number 30.0
identifier PRINT
identifier A
  operator ,
identifier B

22.14.1 public static final int TT_EOF = -1;

ファイルの終わりに到達したことを示す定数とする。

22.14.2 public static final int TT_EOL = '\n';

改行を認識したことを示す定数とする。

22.14.3 public static final int TT_NUMBER = -2;

数字を認識したことを示す定数とする。

22.14.4 public static final int TT_WORD = -3;

語(識別子)を認識したことを示す定数とする。

22.14.5 public int ttype;

この StreamTokenizer が最後に認識したトークンの種類を示す。 これは,TT_EOFTT_EOLTT_NUMBERTT_WORD 又はトークンの最初のバイトである負でないバイト値とする(例えば,トークンが文字列であるならば,ttype は,文字列を始める引用文字をもつ)。

22.14.6 public String sval;

ttype の値が TT_WORD 又は文字列引用文字であるならば,sval の値は,識別子に含まれる文字列又はString (文字列を区切る引用符なしの)とする。 それ以外のすべての認識したトークンに対しては,sval の値は, null とする。

22.14.7 public double nval;

ttype の値が TT_NUMBER ならば,nval の値は,その数字の数値とする。

22.14.8 public StreamTokenizer(InputStream in)

このコンストラクタは,新しく作られたStreamTokenizerを,後の使用に備えて,その実引数の入力ストリーム in を保存することによって初期化する。 StreamTokenizerは,次のデフォルトの状態に初期化される。

22.14.9 public void resetSyntax()

すべてのバイト値が“通常”となるものとして,この StreamTokenizer 用の構文テーブルをリセットする。 つまり,どの文字も空白類,アルファベット,数字,文字列の引用又は注釈文字として認識されない。 したがって,このメソッドを呼ぶことは,次のものと同じとする。

ordinaryChars(0x00, 0xff)

改行,// 注釈及び /* 注釈の認識を制御する三つのフラグには,影響しない。

22.14.10 public void wordChars(int low, int hi)

low から hi までの範囲のすべての文字が“アルファベットの”属性をもつものとして,この StreamTokenizer 用の構文テーブルを修正する。

22.14.11 public void whitespaceChars(int low, int hi)

low から hi までの範囲のすべての文字が“空白類の”属性をもつものとして,この StreamTokenizer 用の構文テーブルを修正する。

22.14.12 public void ordinaryChars(int low, int hi)

low から hi までの範囲のすべての文字が何の属性も持たないものとして,この StreamTokenizer 用の構文テーブルを修正する。

22.14.13 public void ordinaryChar(int ch)

文字 ch が何の属性も持たないものとして,この StreamTokenizer 用の構文テーブルを修正する。

22.14.14 public void commentChar(int ch)

文字 ch が“注釈文字”の属性をもつものとして,この StreamTokenizer 用の構文テーブルを修正する。

22.14.15 public void quoteChar(int ch)

文字 ch が“文字列引用”の属性をもつものとして,この StreamTokenizer 用の構文テーブルを修正する。

22.14.16 public void parseNumbers()

次の12個の文字が,数字の属性をもつものとして,この StreamTokenizer 用の構文テーブルを修正する。

0 1 2 3 4 5 6 7 8 9 . -

22.14.17 public void eolIsSignificant(boolean flag)

この StreamTokenizer は,実引数flagtrueのときにだけ,以降,改行をトークンとして認識する。

22.14.18 public void slashStarComments(boolean flag)

この StreamTokenizer は,実引数flagtrueのときにだけ,以降,/* 及び */ で区切られネストしていないJavaスタイルの注釈を認識し読み飛ばす。

22.14.19 public void slashSlashComments(boolean flag)

この StreamTokenizer は,実引数flagtrueのときにだけ,以降,// で始まるJavaスタイルの行終端注釈を認識し読み飛ばす。

22.14.20 public void lowerCaseMode(boolean flag)

この StreamTokenizer は,実引数flagtrueのときにだけ,以降, 識別子の中の文字を英小文字に変換する。

22.14.21 public int nextToken() throws IOException

直前のトークンが pushback(22.14.22)されているならば, ttype の値を返し,同じトークンを再読み込みする。

そうでなければ,このメソッドは,含まれる入力ストリームの中の次のトークンを切り出す。 トークンの種類を返す。これと同じ値は ttype フィールドでも利用可能となり,さらに,関連するデータが, sval 及び nval フィールドで利用可能となる。

最初に,空白類文字が読み飛ばされる。 ただし,行の終わりを検出し,この StreamTokenizer が現在,行の終わりを認識するものとして設定されているときを除く。この時のトークンの種類は, TT_EOL とする。

数字を検出した場合,その数字を認識する。 最初の文字が "-" であり,次の文字が数字でないならば,この "-" は,通常の文字であると考えられ,その文字自身の本来のトークンとして認識する。 そうでなければ,数字を切り出す,次の "-" の出現,2番目の "." の出現,数字でない文字の最初の検出又はファイルの終わりの検出,のいづれかの最初の出現の前で止まる。 トークンの型は, TT_NUMBER であり,その値は, nval フィールドで利用可能となる。

アルファベットを検出した場合,識別子を認識する。 識別子は,その文字及びその後に続くすべての文字からなり,アルファベットでも数字でもないような最初の文字又はファイルの終わり,このどちらかが最初に出現するまで(これらは,含まない)とする。 この StreamTokenizer が英小文字 モード であるならば,この識別子の文字は,英小文字に変換する。

注釈文字を検出した場合,その後の文字は,次の改行又はファイルの終わり(これらは,含まない)まで読み飛ばされ無視される。 それから,別のトークンの認識を試行する。 この StreamTokenizer が現在,行の終わりを認識するものとして設定されているならば,注釈を終わらせる行の終わりは,含まれる入力ストリーム 中の他の行の終わりと同じくトークンとして認識する。

文字列引用文字を検出した場合,文字列を認識する。 文字列は,文字列引用文字(これは,含まない)より後のすべての文字からなり,同じ文字列引用文字,改行又はファイルの終わりが次に出現するまで(これらは,含まない)とする。 文字列を切り出すときに,通常のエスケープシーケンス \n 及び \t (3.10.6)を認識して一つの文字に変換する。

// を検出し,このStreamTokenizer が 現在, // 注釈を認識するものとして設定されているならば,それに続くすべての文字は,次の改行又はファイルの終わり(これらは,含まない)まで読み飛ばされ無視される。 それから,別のトークンの認識を試行する。 (この StreamTokenizer が現在,改行を認識するものとして設定されているならば,注釈を終わらせる改行は,含まれる入力ストリーム 中の他の改行と同じくトークンとして認識する。)

/* を検出した場合,このStreamTokenizer が 現在,/* 注釈を認識するものとして設定されているならば,それに続くすべての文字は,次の */ (これらは,含まない)が出てくるまで読み飛ばし無視される。 それから,別のトークンの認識を試行する。

上に示す場合が適用されない場合,最初の空白類でない文字を通常の文字とする。 その文字を,トークンと見なし, ttype フィールドに格納し,それを返す。

22.14.22 public void pushBack()

このメソッドを呼ぶことで,現在のトークンを“押し戻す”。 つまり,次回のnextTokenの呼出しに対して,今供給したものと同じトークンを返す。 このメソッドは,行番号を以前の値に回復し ない(not) ことに注意のこと。 したがって,メソッド linenopushBack の後,次のnextToken の呼出しの前に呼び出した場合,正しくない行番号が返されることがある。

22.14.23 public int lineno()

現在のトークンが出現した行の行番号を返す。 入力ストリーム中の最初のトークンが改行でなければ,最初のトークンは,行 1 に出現するものとする。 改行のトークンは,改行ではなく,行の先頭にあるものとして扱う。 つまり,入力ストリーム中の,最初の改行のトークンは,行 2 にあるものとする。

22.14.24 public String toString()

現在のトークン及び現在の行番号を,次のような形式の文字列に変換する。

"Token[x], line m"

ここで,m は,10進数で表した現在の行番号とする。さらに x は,現在のトークンの型に依存する。

Object (20.1.2)のメソッド toString を上書きする。

22.15 クラス java.io.OutputStream

出力ストリーム は, output バイト列を受け取り,それをある出力先に送る。

public abstract class OutputStream {
    public abstract void write(int b) throws IOException;
    public void write(byte[] b)
        throws IOException, NullPointerException;
    public void write(byte[] b, int off, int len)
        throws IOException, NullPointerException,
            IndexOutOfBoundsException;
    public void flush() throws IOException;
    public void close() throws IOException;
}

22.15.1 public abstract void write(int b) throws IOException

write は,1バイトを出力ストリームへ書き込む。 書き込むバイトは, 実引数 b の下位 8ビットとする。 b の上位24ビットは,無視される。

何らかの理由でバイトを書き込むことができなければ,IOException を投げる。 特に,出力ストリームが閉じられている (22.15.5)場合は, IOException を投げる。

22.15.2 public void write(byte[] b)
throws IOException, NullPointerException

write(b) は,write(b, 0, b.length)(22.15.3)の呼出しと同じ効果をもたなければならない。

クラス OutputStreamwrite(b) メソッドは,実際にそのような呼出しをしている。

22.15.3 public void write(byte[] b, int off, int len)
throws IOException, NullPointerException, IndexOutOfBoundsException

write(b, off, len)は,配列 b 中のバイト列のいくつかを,一度に1バイトずつ出力ストリーム に順番に書き込む。 要素 b[off] がこの操作によって書き込まれる最初のバイトであり,b[off+len-1] が最後のバイトとする。

bnull ならば,NullPointerException を投げる。

off が負であるとき,len が負であるとき,又はoff+len が配列 b の要素数より大きいとき,IndexOutOfBoundsException を投げる。

バイトを何らかの理由で書き込むことができなければ,IOException を投げる。 特に,出力ストリームが閉じられている (22.15.5)場合は, IOException を投げる。

クラス OutputStreamwrite(b, off, len) メソッドは,単に,b 中の書き込むべき各々のバイトに対して1回ずつ write (22.15.1)メソッドを繰り返し呼ぶだけである。

22.15.4 public void flush() throws IOException

flushは,以前に書き込まれたいずれかのバイト列が,その出力ストリームの実装によってバッファリングされているならば,該当するバイト列をその意図した出力先にすぐに書き込むことを指示する。

クラス OutputStream のメソッド flush は,何もせずにそのまま返る。

22.15.5 public void close() throws IOException

close は,出力ストリームを閉じる。 閉じられた stream は, 出力操作を実行することができず,再び開くこともできない。

クラス OutputStream のメソッド close は,何もせずにそのまま返る。

22.16 クラス java.io.FileOutputStream

ファイル出力ストリームは,出力バイト列をファイルシステム上のファイルに書き込む。 どのようなファイルが利用できるか又は,生成できるかは,ホスト環境に依存する。

public class
 FileOutputStream extends OutputStream {
    public FileOutputStream(String path)
        throws SecurityException, FileNotFoundException;
    public FileOutputStream(File file)
        throws SecurityException, FileNotFoundException;
    public FileOutputStream(FileDescriptor fdObj)
        throws SecurityException;
    public final FileDescriptor getFD() throws IOException;
    public void write(int b) throws IOException;
    public void write(byte[] b)
        throws IOException, NullPointerException;
    public void write(byte[] b, int off, int len)
        throws IOException, NullPointerException,
            IndexOutOfBoundsException;
    public void close() throws IOException;
    protected void finalize() throws IOException;
}

22.16.1 public FileOutputStream(String path)
throws SecurityException, FileNotFoundException

このコンストラクタは,新たに生成した FileOutputStreamを,ファイルシステム中のパス名pathで名づけられた実際のファイルへの接続を開くことによって,初期化する。 このファイル接続を表すために,新しい FileDescriptor オブジェクトを生成する。

まず最初に,セキュリティマネージャが存在するならば,実引数pathをその実引数として,メソッドcheckWrite (20.17.21)を呼ぶ。

実際のファイルを開くことができなければ,FileNotFoundException を投げる。

22.16.2 public FileOutputStream(File file)
throws SecurityException, FileNotFoundException

このコンストラクタは,新たに生成したFileOutputStreamを,ファイルシステム中のfile という名前の実際のファイルへの接続を開くことによって,初期化する。 このファイル接続を表すために,新しい FileDescriptor オブジェクトを生成する。

まず最初に,セキュリティマネージャが存在するならば,実引数 file をその実引数として,メソッド checkWrite(20.17.21)を呼ぶ。

実際のファイルを開くことができなければ,FileNotFoundException を投げる。

22.16.3 public FileOutputStream(FileDescriptor fdObj)
throws SecurityException

このコンストラクタは,新たに生成した FileOutputStream を,ファイルシステム中の実際のファイルへの接続の存在を表すファイル記述子 fdObj を用いて初期化する。

まず最初に,セキュリティマネージャが存在するならば,ファイル記述子 fdObj をその実引数として,メソッド checkWrite (20.17.21)を呼ぶ。

22.16.4 public final FileDescriptor getFD() throws IOException

このメソッドは,この FileOutputStream によって使用されている,ファイルシステム中の実際のファイルへの接続を表す FileDescriptor オブジェクト (22.26)を返す。

22.16.5 public void write(int b) throws IOException

この操作に対するバイトを,このファイル出力ストリームが接続している実際のファイルへ書き込む。

OutputStream 中のメソッド write を実装する (22.15.1)

22.16.6 public void write(byte[] b)
throws IOException, NullPointerException

この操作に対するバイト列を,この ファイル出力ストリームが接続している実際のファイルへ書き込む。

OutputStream 中のメソッド write を実装する (22.15.2)

22.16.7 public void write(byte[] b, int off, int len)
throws IOException, NullPointerException, IndexOutOfBoundsException

この操作に対するバイト列を,このファイル出力ストリームが接続している実際のファイルへ書き込む。

OutputStream 中のメソッド write を上書きする (22.15.3)

22.16.8 public void close() throws IOException

このファイル出力ストリームは,閉じられ,バイト列を書き込むためにこれを利用できなくなる。

OutputStream 中のメソッド close を実装する (22.15.5)

22.16.9 protected void finalize() throws IOException

FileOutputStream は,実在ファイルへの接続を後始末するために終了化子を用いる。

22.17 クラス java.io.PipedOutputStream

パイプ出力ストリームは,パイプ入力ストリーム に接続しなければならない。 そのパイプ入力ストリーム は,パイプ出力ストリームに書かれたあらゆるバイト列のデータを提供する。 典型的な例としては,一つのスレッドによってPipeOutputStreamオブジェクトにデータが書き込まれ,そのデータは,他のスレッドによって,対応するPipedInputStream (22.5)から読み込まれる。 一つのスレッドから二つのオブジェクトを用いることは,推奨できない。というのは,それによってスレッドがデッドロックされることがあるからである。

public class PipedOutputStream extends OutputStream {
    public PipedOutputStream(PipedInputStream snk)
        throws IOException;
    public PipedOutputStream();
    public void connect(PipedInputStream snk)
        throws IOException;
    public void write(int b) throws IOException;
    public void write(byte[] b, int off, int len)
        throws IOException, NullPointerException,
            IndexOutOfBoundsException;
    public void close() throws IOException;
}

22.17.1 public PipedOutputStream(PipedInputStream snk)
throws IOException

このコンストラクタは,新たに生成した PipedOutputStream を初期化し,パイプ入力ストリーム snk に接続する。 このストリームに書き込まれるバイト列データは, snk からの input として利用可能となる。

22.17.2 public PipedOutputStream()

このコンストラクタは,新たに生成した PipedOutputStream を初期化するが,まだ接続しない。 それは,使用される前に PipedInputStream に接続されなければならない。

22.17.3 public void connect(PipedInputStream snk)
throws IOException

メソッド connect は,この パイプ出力ストリームを, パイプ入力ストリーム snk に接続する。 このオブジェクトがすでにその他の パイプ入力ストリーム に接続されているならば,IOException を投げる。

snk が 未接続のパイプ入力ストリーム src が 未接続のパイプ出力ストリームとすると,これらは,どちらか一方の呼出しによって接続される。 すなわち,

src.connect(snk)

又は

snk.connect(src)

二つの呼出しは,同じ効果をもつ。

22.17.4 public void write(int b) throws IOException

あるスレッドが,接続されたパイプ入力ストリーム からバイト列データを読み込み,そのスレッドがもはや存在していないならば,IOException を投げる。

OutputStream のメソッド write を実装する (22.15.1)

22.17.5 public void write(byte[] b, int off, int len)
throws IOException, NullPointerException, IndexOutOfBoundsException

あるスレッドが,接続されたパイプ入力ストリーム からバイト列データを読み込み,そのスレッドがもはや存在していないならば,IOException を投げる。

OutputStream のメソッド write を上書きする (22.15.3)

22.17.6 public void close() throws IOException

このパイプ出力ストリームは,閉じられ,もはやバイト列を書き込むために使用できなくなる。

OutputStream のメソッド close を上書きする (22.15.5)

22.18 クラス java.io.ByteArrayOutputStream

ByteArrayOutputStream は,ストリームの生成又はメソッド reset の最後の呼出し以降に,そのストリームに書き込まれたすべてのバイト列を蓄積する内部バッファをもつ。 任意の時点で,これまでにストリームに書き込まれたバイト列は,バイトの配列又は String の形態で取り出される。 これまでに書き込まれたバイト列は又,他のある別の出力ストリームに複写してもよい。 メソッド size は,これまでに書き込まれた文字の数を返す。

public class
 ByteArrayOutputStream extends OutputStream {
    protected byte[] buf;
    protected int count;
    public ByteArrayOutputStream();
    public ByteArrayOutputStream(int size);
    public void write(int b);
    public void write(byte[] b, int off, int len)
        throws NullPointerException, IndexOutOfBoundsException;
    public int size();
    public void reset();
    public byte[] toByteArray();
    public String toString();
    public String toString(int hibyte);
    public void writeTo(OutputStream out) throws IOException;
}

22.18.1 protected byte[] buf;

バイト列の内部配列とする。要素 buf[0] から buf[count-1] は,ストリームの生成又は最後の reset (22.18.8)操作以降,そのストリームに書き込まれているバイト列とする。

22.18.2 protected int count;

この値は,常に非負の値でなければならない。 これは,ストリームの生成又は最後の reset (22.18.8)操作以降,そのストリーム書き込まれているバイト列の数とする。

22.18.3 public ByteArrayOutputStream()

このコンストラクタは,新たに生成された ByteArrayOutputStream を初期化し,その内部バッファは,32の長さをもつ。

22.18.4 public ByteArrayOutputStream(int size)

このコンストラクタは,新たに生成された ByteArrayOutputStream を初期化し,その内部バッファは, size の長さをもつ。 これは,実効性能にだけ関係する。 すなわち,ストリームに書き込まれた追加バイト列を格納するために,必要な時はいつでも,バッファ列は,より大きなものと置換される。

22.18.5 public void write(int b)

内部バッファに1バイト追加される。追加されるバイトは,変数 n の下位8ビットとする。 変数 n の上位24ビットは,無視される。

OutputStream のメソッド write (22.15.1)を実装する。

22.18.6 public void write(byte[] b, int off, int len)
throws NullPointerException, IndexOutOfBoundsException

要素 b[off] から b[off+len-1] を内部バッファに追加する。

bnull ならば,NullPointerException を投げる。

off が負の値であるとき,len が負であるとき,又は off+len が配列 b よりも大きいとき,IndexOutOfBoundsException を投げる。

OutputStreamのメソッド write(22.15.3)を上書きする。

22.18.7 public int size()

count の現在の値を返す。

22.18.8 public void reset()

内部変数 count をゼロに初期化し,それによってそれまでストリームに書き込まれたすべてのバイト列を論理的に廃棄する。 しかし,内部バッファ列は,非常に大きいことがあるが,そのままとする。

22.18.9 public byte[] toByteArray()

バイト列の新しい配列を生成し,それを返す。 その長さは, count の現在の値と等しい。 その初期状態における内容は,それまでストリームに書き込まれたバイト列の複製とする。 すなわち,buf の要素 0 から count-1 とする。

22.18.10 public String toString()

新しい String を生成し,それを返す。 その長さは, count の現在の値と等しい。 その初期状態における内容は,文字を生成するために拡張された,ここまで ストリームに書き込まれたバイト列の複製,すなわち,buf の要素 0 から count-1 及びゼロ拡張されたものとする。 つまり,tostring() は, toString(0) (22.18.11) と同様の効果をもつ。

Object のメソッド toString (20.1.2)を上書きする。

22.18.11 public String toString(int hibyte)

バイト列の新しい配列を生成し,それを返す。 その長さは, count の現在の値に等しい。 その初期における内容は,それまでにストリームに書き込まれたバイト列,すなわち buf0 から count-1 までの要素の複製であり,hibyte は,おのおのの文字の上位8ビットを与える。 つまり,結果の文字 k は,次のものと等しい。

((hibyte & 0xff) << 8) | (buf[k] & 0xff)

実引数 hibyte を受け取る String コンストラクタ (20.12.6) を参照のこと。

22.18.12 public void writeTo(OutputStream out) throws IOException

現在の内部バッファの内容を出力ストリーム out に,次の呼出しによって書き出す。

out.write(buf, 0, count)

outthis と同じ場合,その効果は,単に,バッファに現在の内容の複製を追加することであり,それによってバッファされたバイト列の数は倍になることに注意のこと。 これは,特に有効な効果ではないことがあるが,重要な点は,この操作が,無限ループに入るよりは,実用的な効果をもちながら,“終了する”ということである。

22.19 クラス java.io.FilterOutputStream

FilterOutputStream は,基本的なデータの出力先として使用する他の出力ストリームを含み,出力時にデータを変換したり,又は付加的な機能を与えたりする。 クラス FilterOutputStream 自体は,OutputStream のすべてのメソッドを,すべての要求を,含んでいる出力ストリームに引き渡すというやりかたで単に上書きしているだけである。 FilterOutputStream のサブクラスは,これらのメソッドのいくつかをさらに上書き,並びにメソッド及びフィールドを追加してもよい。

public class FilterOutputStream extends OutputStream {
    protected OutputStream out;
    public FilterOutputStream(OutputStream out);
    public void write(int b) throws IOException;
    public void write(byte[] b)
        throws IOException, NullPointerException;
    public void write(byte[] b, int off, int len)
        throws IOException, NullPointerException,
            IndexOutOfBoundsException;
    public void flush() throws IOException;
    public void close() throws IOException;
}

22.19.1 protected OutputStream out;

フィルタリングされる出力ストリームとする。

22.19.2 public FilterOutputStream(OutputStream out)

このコンストラクタは,新たに生成した FilterInputStream を,後の使用に備えて,実引数 out をフィールド this.out に代入することによって初期化する。

22.19.3 public void write(int b) throws IOException

このメソッドは,単に out.write(b) を実行する。

OutputStream の抽象メソッド write (22.15.1)を実装する。

22.19.4 public void write(byte[] b)
throws IOException, NullPointerException

このメソッドは,単に out.write(b) を実行する。

OutputStream のメソッド write (22.15.2)を実装する。

22.19.5 public void write(byte[] b, int off, int len)
throws IOException, NullPointerException, IndexOutOfBoundsException

このメソッドは,単に out.write(b, off, len) を実行する。

OutputStream のメソッド write (22.15.3)を上書きする 。

22.19.6 public void flush() throws IOException

このメソッドは,単に out.flush() を実行する。

OutputStream のメソッド flush (22.15.4)を上書きする。

22.19.7 public void close() throws IOException

このメソッドは,単に out.close() を実行する。

OutputStream のメソッドclose (22.15.5)を上書きする。

22.20 クラス java.io.BufferedOutputStream

BufferedOutputStream は,他の出力ストリームに機能,すなわち出力をバッファリングする能力を付加する。 BufferedOutputStream が生成される時,内部バッファ配列が生成される。 バイト列がストリームに書き込まれると,それらは,内部バッファに蓄積され,内部バッファは,必要に応じてフラッシュされる。つまり,含まれる出力ストリームに対する出力を,一度に1バイトずつというよりはむしろ,大きなブロック単位で実行する。

public class BufferedOutputStream extends FilterOutputStream {
    protected byte[] buf;
    protected int count;
    public BufferedOutputStream(OutputStream out);
    public BufferedOutputStream(OutputStream out, int size);
    public void write(int b) throws IOException;
    public void write(byte[] b)
        throws IOException, NullPointerException;
    public void write(byte[] b, int off, int len)
        throws IOException, NullPointerException,
            IndexOutOfBoundsException;
    public void flush() throws IOException;
}

22.20.1 protected byte[] buf;

内部バッファ配列とする。

22.20.2 protected int count;

この値は,常に 0 から buf.length の範囲にある。要素 buf[0] から buf[count-1] に,有効なバイトデータを含む。

22.20.3 public BufferedOutputStream(OutputStream out)

このコンストラクタは,新たに生成した BufferedOutputStream を,後の使用に備えて,その実引数である入力ストリーム out を保存することによって初期化する。内部バッファ配列を生成し,buf の中に格納する。

22.20.4 public BufferedOutputStream(OutputStream out, int size)

このコンストラクタは,新たに生成した BufferedOutputStream を,後の使用に備えて,その実引数である入力ストリーム out を保存することによって初期化する。 size の大きさの内部バッファ配列を生成し,buf の中に格納する。

22.20.5 public void write(int b) throws IOException

OutputStream のメソッドwrite (22.15.1)の一般的な規定を参照のこと。

FilterOutputStreamwrite (22.19.3)を上書きする。

22.20.6 public void write(byte[] b)
throws IOException, NullPointerException

OutputStream のメソッド write (22.15.2)の一般的な規定を参照のこと。

FilterOutputStream のメソッド write (22.19.4)を上書きする。

22.20.7 public void write(byte[] b, int off, int len)
throws IOException, NullPointerException, IndexOutOfBoundsException

OutputStream のメソッド write (22.15.3)の一般的な規定を参照のこと。

FilterOutputStream のメソッド write (22.19.5)を上書きする。

22.20.8 public void flush() throws IOException

OutputStream のメソッド flush (22.15.4)の一般的な規定を参照のこと。

FilterOutputStream のメソッド flush (22.19.6)を上書きする。

22.21 クラス java.io.DataOutputStream

データ出力ストリームは,種々の型のデータを,後にある出力ストリームに送るための特定の書式の文字列に変換する機能を提供する。

public class DataOutputStream extends FilterOutputStream
        implements DataOutput {
    protected int written;
    public DataOutputStream(OutputStream out);
    public void write(int b) throws IOException;
    public void write(byte[] b, int off, int len)
        throws IOException, NullPointerException,
            IndexOutOfBoundsException;
    public void flush() throws IOException;
    public final void writeBoolean(boolean v) throws IOException;
    public final void writeByte(int v) throws IOException;
    public final void writeShort(int v) throws IOException;
    public final void writeChar(int v) throws IOException;
    public final void writeInt(int v) throws IOException;
    public final void writeLong(long v) throws IOException;
    public final void writeFloat(float v) throws IOException;
    public final void writeDouble(double v) throws IOException;
    public final void writeBytes(String s)
        throws IOException, NullPointerException;
    public final void writeChars(String s)
        throws IOException, NullPointerException;
    public final void writeUTF(String str)
        throws IOException, NullPointerException;
    public final int size();
}

22.21.1 protected int written;

このフィールドは,ストリームこれまでに書き込まれたバイト列の数を含む。

22.21.2 public DataOutputStream(OutputStream out)

このコンストラクタは,新たに生成した DataOutputStream を,後の使用に備えて,その実引数である出力ストリーム out を保存することによって初期化する。書き込みカウンタ written を,ゼロに設定する。

22.21.3 public void write(int b) throws IOException

この操作に対するバイト(実引数 b の下位8ビット)を,含まれる出力ストリームに書き込む。例外を投げなければ,書き込みカウンタ written は, 1 だけ増加する。

OutputStream のメソッド write (22.15.1)を実装する。

22.21.4 public void write(byte[] b, int off, int len)
throws IOException, NullPointerException, IndexOutOfBoundsException

この操作に対するバイト列を,含まれる出力ストリームに書き込む。例外を投げなければ,書き込みカウンタ written は, len だけ増加する。

OutputStream のメソッド write (22.15.3)を実装する。

22.21.5 public void flush() throws IOException

含まれる出力ストリーム をフラッシュする。

OutputStream のメソッド write (22.15.4)を上書きする。

22.21.6 public final void writeBoolean(boolean v)
throws IOException

DataOutput のメソッド writeBoolean (22.2.4)の一般的な規定を参照のこと。

この操作に対するバイトを,含まれる出力ストリームに書き込む。例外を投げなければ,書き込みカウンタ written は,1だけ増加する。

22.21.7 public final void writeByte(int v) throws IOException

DataOutput のメソッド writeByt (22.2.5)の一般的な規定を参照のこと。

この操作に対するバイトを,含まれる出力ストリームに書き込む。例外を投げなければ,書き込みカウンタ written は,1だけ増加する。

22.21.8 public final void writeShort(int v) throws IOException

DataOutput のメソッド writeShort (22.2.6)の一般的な規定を参照のこと。

この操作に対するバイト列を,含まれる出力ストリームに書き込む。例外を投げなければ,書き込みカウンタ written は,2だけ増加する。

22.21.9 public final void writeChar(int v) throws IOException

DataOutput のメソッド writeChar (22.2.7)の一般的な規定を参照のこと。

この操作に対するバイト列を,それに含まれる出力ストリームに書き込む。例外を投げなければ,書き込みカウンタ written は,2だけ増加する。

22.21.10 public final void writeInt(int v) throws IOException

DataOutput のメソッド writeInt (22.2.8)の一般的な規定を参照のこと。

この操作に対するバイト列を,含まれる出力ストリームに書き込む。例外を投げなければ,書き込みカウンタ written は,4だけ増加する。

22.21.11 public final void writeLong(long v) throws IOException

DataOutput のメソッド writeLong (22.2.9)の一般的な規定を参照のこと。

この操作に対するバイト列を,それに含まれる出力ストリームに書き込む。例外を投げなければ,書き込みカウンタ written は,8だけ増加する。

22.21.12 public final void writeFloat(float v) throws IOException

DataOutput のメソッド writeInt (22.2.10)の一般的な規定を参照のこと。

この操作に対するバイト列を,含まれる出力ストリームに書き込む。例外を投げなければ,書き込みカウンタ written は,4だけ増加する。

22.21.13 public final void writeDouble(double v) throws IOException

DataOutput のメソッド writeDouble (22.2.11)の一般的な規定を参照のこと。

この操作に対するバイト列を,それに含まれる出力ストリームに書き込む。例外を投げなければ,書き込みカウンタ written は,8だけ増加する。

22.21.14 public final void writeBytes(String s)
throws IOException, NullPointerException, IndexOutOfBoundsException

DataOutput のメソッド writeBytes (22.2.12)の一般的な規定を参照のこと。

この操作に対するバイト列を,それに含まれる出力ストリームに書き込む。例外を投げなければ,書き込みカウンタ written は,sの長さだけ増加する。

22.21.15 public final void writeChars(String s)
throws IOException, NullPointerException, IndexOutOfBoundsException

DataOutput のメソッドwriteChars (22.2.13)の一般的な規定を参照のこと。

この操作に対するバイト列を,それに含まれる出力ストリームに書き込む。例外を投げなければ,書き込みカウンタ written は,s2倍の長さだけ増加する。

22.21.16 public final void writeUTF(String str)
throws IOException, NullPointerException, IndexOutOfBoundsException

DataOutput のメソッド writeUTF (22.2.14)の一般的な規定を参照のこと。

この操作に対するバイト列を,それに含まれる出力ストリームに書き込む。例外を投げなければ,書き込みカウンタ written は,出力ストリームに書き込まれたバイト列の総数だけ増加する。 これは,小さくて長さ s2を加えたものであり,また大きくても長さ s3倍に 2を加えたものとする。

22.21.17 public final int size()

メソッドsize は, 書き込みカウンタ written の現在の値,すなわちこれまでに書き込んだバイト列の数を返す。

22.22 クラス java.io.PrintStream

PrintStreamは,他の出力ストリームに機能,つまりさまざまな形式のデータの値の印刷表現を生成する便利な能力を追加する。 同様に,その他の二つの機能も提供している。 他の出力ストリームと異なり, PrintStream は, IOException を決して投げない。 その代わりに,例外状態は,メソッド checkError によって検査することができる内部的なフラグに設定する。 オプションとして,PrintStream を“自動フラッシュ”するものとして生成することもできる。 これは,バイト列の配列を一つ書き込んだ後,又は“\n”と等しい1バイトの文字を書き込んだ後に,メソッド flush を自動的に呼び出すことを意味する。

public class PrintStream
 extends FilterOutputStream {
    public PrintStream(OutputStream out);
    public PrintStream(OutputStream out, boolean autoflush);
    public void write(int b);
    public void write(byte[] b, int off, int len)
        throws NullPointerException, IndexOutOfBoundsException;
    public void flush();
    public void close();
    public boolean checkError();
    public void print(Object obj);
    public void print(String s);
    public void print(char[] s) throws NullPointerException;
    public void print(boolean b);
    public void print(char c);
    public void print(int i);
    public void print(long l);
    public void print(float f);
    public void print(double d);
    public void println();
    public void println(Object obj);
    public void println(String s);
    public void println(char[] s) throws NullPointerException;
    public void println(boolean b);
    public void println(char c);
    public void println(int i);
    public void println(long l);
    public void println(float f);
    public void println(double d);
}

22.22.1 public PrintStream(OutputStream out)

この初期化コンストラクタは,新しく生成した PrintStream を,後の使用に備えて,実引数である出力ストリーム out を保存することによって初期化する。 このストリームは,自動フラッシュをしない。

22.22.2 public PrintStream(OutputStream out, boolean autoflush)

このコンストラクタは,新しく生成した PrintStream を,後の使用に備えて,実引数である出力ストリーム out を保存することによって初期化する。このストリームは,autoflushtrue の時にだけ,自動フラッシュとなる。

22.22.3 public void write(int b)

OutputStream のメソッド write (22.15.1) の一般的な規定を参照のこと。

FilterOutputStream のメソッド write (22.19.3)を上書きする。

22.22.4 public void write(byte[] b, int off, int len)
throws NullPointerException, IndexOutOfBoundsException

OutputStream のメソッド write (22.15.3)の一般的な規定を参照のこと。

FilterOutputStream のメソッド write (22.19.5)を上書きする。

22.22.5 public void flush()

OutputStream のメソッド flush (22.15.4)の一般的な規定を参照のこと。

FilterOutputStream のメソッド flush (22.19.6)を上書きする。

22.22.6 public void close()

OutputStream のメソッド close (22.15.5)の一般的な規定を参照のこと。

FilterOutputStream のメソッド close (22.19.7)を上書きする。

22.22.7 public boolean checkError()

この出力ストリームに,何らかのエラーが発生しているとき,つまり,含まれる出力ストリームに対する任意の操作の結果が InterruptedIOException 以外の IOException となったことがあるときにだけ true を返す。含まれる出力ストリームに対する操作が InterruptedIOException を投げる場合,クラス PrintStream は,その例外を,次に示す処理又は同等な処理を実行することによって,変換し中断して返す。

Thread.currentThread().interrupt();

22.22.8 public void print(Object obj)

String.valueOf(obj)(20.12.38)によって生成される String の中の文字の下位バイトを,順番に,メソッドwrite(22.22.3)と同じ方法で,含まれる出力ストリームに書き込む。

22.22.9 public void print(String s)

文字列 s の中の文字の下位バイトを,順番に,メソッド write(22.22.3)と同じ方法で,含まれる出力ストリームに書き込む。 snull ならば,null の4文字の下位バイトを,含まれる出力ストリームに書き込む。

22.22.10 public void print(char[] s) throws NullPointerException

文字配列 s の中の文字の下位バイトを,順番に,メソッド write(22.22.3)と同じ方法で,含まれる出力ストリームに書き込む。

snull ならば,NullPointerException を投げる。

22.22.11 public void print(boolean b)

String.valueOf(b)(20.12.41)によって生成される String の中の文字の下位バイトを,順番に,メソッド write(22.22.3)と同じ方法で,含まれる出力ストリームに書き込む。

22.22.12 public void print(char c)

文字 c の下位バイトを,順番に,メソッド write(22.22.3)と同じ方法で,含まれる出力ストリームに書き込む。

22.22.13 public void print(int i)

String.valueOf(i)(20.12.43)によって生成される String の中の文字の下位バイトを,順番に,メソッド write(22.22.3)と同じ方法で,含まれる出力ストリームに書き込む。

22.22.14 public void print(long l)

String.valueOf(l)(20.12.44)によって生成される String の中の文字の下位バイトを,順番に,メソッド write(22.22.3)と同じ方法で,含まれる出力ストリームに書き込む。

22.22.15 public void print(float f)

String.valueOf(f)(20.12.45)によって生成される String の中の文字の下位バイトを,順番に,メソッド write(22.22.3)と同じ方法で,含まれる出力ストリームに書き込む。

22.22.16 public void print(double d)

String.valueOf(d)(20.12.46)によって生成される String の中の文字の下位バイトを,順番に,メソッド write(22.22.3)と同じ方法で,含まれる出力ストリームに書き込む。

22.22.17 public void println()

文字 '\n' の下位バイトをメソッド write(22.22.3)と同じ方法で,含まれる出力ストリームに書き込む。

22.22.18 public void println(Object obj)

print(obj)(22.22.8)と同じ方法で書き込んだ後,文字 '\n' の下位バイトをメソッド write(22.22.3)と同じ方法で,含まれる出力ストリームに書き込む。

22.22.19 public void println(String s)

print(s)(22.22.9)と同じ方法で書き込んだ後,文字 '\n' の下位バイトをメソッド write(22.22.3)と同じ方法で,含まれる出力ストリームに書き込む。

22.22.20 public void println(char[] s) throws NullPointerException

print(s)(22.22.10)と同じ方法で書き込んだ後,文字 '\n' の下位バイトをメソッド write(22.22.3)と同じ方法で,含まれる出力ストリームに書き込む。

snull ならば,NullPointerException を投げる。

22.22.21 public void println(boolean b)

print(b)(22.22.11)と同じ方法で書き込んだ後,文字の下位バイトをメソッド write(22.22.3)と同じ方法で,含まれる出力ストリームに書き込む。

22.22.22 public void println(char c)

print(c)(22.22.12)と同じ方法で書き込んだ後,文字 "\n" の下位バイトをメソッド write(22.22.3)と同じ方法で,含まれる出力ストリームに書き込む。

22.22.23 public void println(int i)

print(i)(22.22.13)と同じ方法で書き込んだ後,文字 "\n" の下位バイトをメソッド write(22.22.3)と同じ方法で,含まれる出力ストリームに書き込む。

22.22.24 public void println(long l)

print(l)(22.22.14)と同じ方法で書き込んだ後,文字 "\n" の下位バイトをメソッド write(22.22.3)と同じ方法で,含まれる出力ストリームに書き込む。

22.22.25 public void println(float f)

print(f)(22.22.15)と同じ方法で書き込んだ後,文字 "\n" の下位バイトをメソッド write(22.22.3)と同じ方法で,含まれる出力ストリームに書き込む。

22.22.26 public void println(double d)

print(d)(22.22.16)と同じ方法で書き込んだ後,文字 "\n" の下位バイトをメソッド write(22.22.3)と同じ方法で,含まれる出力ストリームに書き込む。

22.23 クラス java.io.RandomAccessFile

ランダムアクセスファイルは,大きなバイトの配列をファイルシステムに格納したものと同じ振舞いをする。 その暗黙の配列には,ファイルポインタ(file pointer) と呼ぶカーソル又はインデクスの一種がある。 入力操作は,ファイルポインタの位置からバイト列を読み込み,ファイルポインタを,読み込んだバイト数分進める。 ランダムアクセスファイルが読み込み/書き込みモード で生成されているならば,出力操作も利用できる。 出力操作は,ファイルポインタの位置からバイト列を書き込み,ファイルポインタを,書き込んだバイト数分進める。 暗黙の配列の終わりを越えて書き込む出力操作は,その配列を拡張する。 ファイルポインタは,メソッドgetFilePointerで取得でき,メソッドseekで設定できる。

public class RandomAccessFile implements DataOutput, DataInput {
    public RandomAccessFile(String path, String mode)
        throws SecurityException, IOException,
            IllegalArgumentException;
    public RandomAccessFile(File file, String mode)
        throws SecurityException, IOException,
            IllegalArgumentException;
    public final FileDescriptor getFD() throws IOException;
    public native long getFilePointer() throws IOException;
    public native void seek(long pos) throws IOException;
    public native long length() throws IOException;
    public native void close() throws IOException;
    public native int read() throws IOException;
    public int read(byte[] b)
        throws IOException, NullPointerException;
    public int read(byte[] b, int off, int len)
        throws IOException, NullPointerException,
            IndexOutOfBoundsException;
    // The methods that implement interface DataInput:
    public final void readFully(byte[] b)
        throws IOException, NullPointerException;
    public final void readFully(byte[] b, int off, int len)
        throws IOException, NullPointerException,
            IndexOutOfBoundsException;
    public int skipBytes(int n) throws IOException;
    public final boolean readBoolean() throws IOException;
    public final byte readByte() throws IOException;
    public final int readUnsignedByte() throws IOException;
    public final short readShort() throws IOException;
    public final int readUnsignedShort() throws IOException;
    public final char readChar() throws IOException;
    public final int readInt() throws IOException;
    public final long readLong() throws IOException;
    public final float readFloat() throws IOException;
    public final double readDouble() throws IOException;
    public final String readLine() throws IOException;
    public final String readUTF() throws IOException;
    // The methods that implement interface DataOutput:
    public native void write(int b) throws IOException;
    public void write(byte[] b)
        throws IOException, NullPointerException;
    public void write(byte[] b, int off, int len)
        throws IOException, NullPointerException,
            IndexOutOfBoundsException;
    public final void writeBoolean(boolean v) throws IOException;
    public final void writeByte(int v) throws IOException;
    public final void writeShort(int v) throws IOException;
    public final void writeChar(int v) throws IOException;
    public final void writeInt(int v) throws IOException;
    public final void writeLong(long v) throws IOException;
    public final void writeFloat(float v) throws IOException;
    public final void writeDouble(double v) throws IOException;
    public final void writeBytes(String s) throws IOException;
    public final void writeChars(String s) throws IOException;
    public final void writeUTF(String str) throws IOException;
}

このクラスのすべての読み込みルーチンでは,一般的に,必要な数のバイト列を読み込む前にファイルの終わりに達したならば,EOFException (IOExceptionの一種)を投げる。 ファイルの終わり以外の理由で,バイトが読めなければ,EOFException ではなく IOException を投げる。 特に,ストリームが閉じられている(22.23.7)場合には,IOExceptionとなる。

22.23.1 public RandomAccessFile(String path, String mode)
throws SecurityException, IOException, IllegalArgumentException

このコンストラクタは, 新しく作成したRandomAccessFile を,path 名によって指定されたファイルシステム中の実ファイルとの接続を開くことによって初期化する。 このファイル接続を表すために,新しい FileDescriptor オブジェクトを生成する。

まず,セキュリティマネージャがあれば,メソッド checkRead(20.17.19)を,実引数 path を実引数として呼び出す。

次に, モード が "rw" でかつセキュリティマネージャがあれば,メソッドcheckWrite (20.17.21)path 実引数を実引数として呼び出す。 モード が "rw" ならば,ファイルは,読み込み及び書き込みの両方ができる。 モード が "r" ならば,ファイルは,読み込みはできるが,書き込みはできない(このオブジェクトに対するすべての write メソッドは,単にIOException を投げる)。 モード が "r" 又は "rw" でなければ,このコンストラクタは, IllegalArgumentException を投げる。

22.23.2 public RandomAccessFile(File file, String mode)
throws SecurityException, IOException, IllegalArgumentException

このコンストラクタは,新しく作成した RandomAccessFile を,file によって指定されたファイルシステム内の実ファイルと接続することによって初期化する。この ファイル接続を表すために,新しい ファイル記述子オブジェクトを生成する。

まず,セキュリティマネージャがあれば,メソッド checkRead(20.17.19)file 実引数によって表されるパスを実引数にして呼び出す。

次に, モード が "rw" でかつセキュリティマネージャがあれば,メソッド checkWrite(20.17.21)を file 実引数によって表されるパスを実引数にして呼び出す。

モード が "rw" であれば,ファイルは,読み込み及び書き込みの両方ができる。 モード が "r" ならば,ファイルは,読み込み可能であるが書き込みはできない(このオブジェクトに対するすべてのメソッド write は,単に IOException を投げる)。 モード が "r" 又は "rw" でなければ,このコンストラクタは, IllegalArgumentException を投げる。

22.23.3 public final FileDescriptor getFD() throws IOException

このメソッドは,このクラス RandomAccessFile が使用しているファイルシステムの実ファイルとの接続を表す,ファイル記述子オブジェクト(22.26)を返す。

22.23.4 public long getFilePointer() throws IOException

このランダムアクセスファイルのファイルポインタの現在位置を返す。 なんらかの理由でそのファイルポインタが読み込みできない場合は,IOException を投げる。

22.23.5 public void seek(long pos) throws IOException

ランダムアクセスファイルのファイルポインタを pos に設定する,ファイルポインタは,ファイルの中の位置であり,単位は,バイトとする。 位置 0は,ファイルの開始位置とする。 pos0 より小さいか若しくはファイルの長さよりも大きい,又はなんらかの理由でそのファイルポインタが読み込みできない場合は,IOException を投げる。

22.23.6 public long length() throws IOException

ランダムアクセスファイルの長さをバイト単位で返す。

なんらかの理由で長さが読み込めなければ,IOException を投げる。

22.23.7 public void close() throws IOException

ランダムアクセスファイルを閉じる。閉じられたランダムアクセスファイルは,入力又は出力処理を実行できない,かつ再度開くことはできない。

22.23.8 public int read() throws IOException

このメソッドは,ランダムアクセスファイルから1バイト読み込む。バイトは,0から255 (0x00-0xff) の範囲の整数として返す。ファイルポインタがファイルの最後にありデータが読み込めなければ,値 -1 を返す。

ファイルの最後という以外の理由で読み込みに失敗した場合は,IOException を投げる。特に,入力ストリームが閉じられている(22.23.7)場合は, IOException を投げる。

RandomAccessFile は,InputStream のサブクラスではないけれども,このメソッドは,InputStream のメソッド read(22.3.1)とまったく同じ振舞いをする。

22.23.9 public int read(byte[] b)
throws IOException, NullPointerException

RandomAccessFile は,InputStreamのサブクラスではないけれども,このメソッドは,InputStreamのメソッド read(22.3.2)とまったく同じ振舞いをする。

22.23.10 public int read(byte[] b, int off, int len)
throws IOException, NullPointerException, IndexOutOfBoundsException

RandomAccessFile は,InputStream のサブクラスではないけれども,このメソッドは,InputStreamのメソッド read (22.3.3)とまったく同じ振舞いをする。

22.23.11 public final void readFully(byte[] b)
throws IOException, NullPointerException

DataInputのメソッド readFully (22.1.1)の規定を参照のこと。

この操作に対するバイト列は,ランダムアクセスファイルの現在のファイルポインタから読み込む。

22.23.12 public final void readFully(byte[] b, int off, int len) throws IOException, NullPointerException, IndexOutOfBoundsException

DataInput のメソッド readFully (22.1.2)の規定を参照のこと。

この操作に対するバイト列は,ランダムアクセスファイルの現在のファイルポインタから読み込む。

22.23.13 public int skipBytes(int n) throws IOException

DataInput のメソッド skipBytes の規定を参照のこと。

この操作に対するバイト列は,ランダムアクセスファイルの現在のファイルポインタから読み込む。

22.23.14 public final boolean readBoolean() throws IOException

DataInput のメソッド readBoolean (22.1.4)の規定を参照のこと。

この操作に対するバイトは,ランダムアクセスファイルの現在のファイルポインタから読み込む。

22.23.15 public final byte readByte() throws IOException

DataInput のメソッド readByte (22.1.5)の規定を参照のこと。

この操作に対するバイトは,ランダムアクセスファイルの現在のファイルポインタから読み込む。

22.23.16 public final int readUnsignedByte() throws IOException

DataInput のメソッド readUnsignedByte (22.1.6)の規定を参照のこと。

この操作に対するバイトは,ランダムアクセスファイルの現在のファイルポインタから読み込む。

22.23.17 public final short readShort() throws IOException

DataInput のメソッド readShort (22.1.7)の規定を参照のこと。

この操作に対するバイト列は,ランダムアクセスファイルの現在のファイルポインタから読み込む。

22.23.18 public final int readUnsignedShort() throws IOException

DataInput のメソッド readUnsignedShort (22.1.8)の規定を参照のこと。

この操作に対するバイト列は,ランダムアクセスファイルの現在のファイルポインタから読み込む。

22.23.19 public final char readChar() throws IOException

DataInput のメソッド readChar (22.1.9)の規定を参照のこと。

この操作に対するバイト列は,ランダムアクセスファイルの現在のファイルポインタから読み込む。

22.23.20 public final int readInt() throws IOException

DataInput のメソッド readInt (22.1.10)の規定を参照のこと。

この操作に対するバイト列は,ランダムアクセスファイルの現在のファイルポインタから読み込む。

22.23.21 public final long readLong() throws IOException

DataInput のメソッド readLong (22.1.11)の規定を参照のこと。

この操作に対するバイト列は,ランダムアクセスファイルの現在のファイルポインタから読み込む。

22.23.22 public final float readFloat() throws IOException

DataInput のメソッド readFloat (22.1.12)の規定を参照のこと。

この操作に対するバイト列は,ランダムアクセスファイルの現在のファイルポインタから読み込む。

22.23.23 public final double readDouble() throws IOException

DataInput のメソッド readDouble (22.1.13)の規定を参照のこと。

この操作に対するバイト列は,ランダムアクセスファイルの現在のファイルポインタから読み込む。

22.23.24 public final String readLine() throws IOException

DataInput のメソッド readLine (22.1.14)の規定を参照のこと。

この操作に対するバイト列は,ランダムアクセスファイルの現在のファイルポインタから読み込む。

22.23.25 public final String readUTF() throws IOException

DataInput のメソッド readUTF(22.1.15)の規定を参照のこと。

この操作に対するバイト列は,ランダムアクセスファイルの現在のファイルポインタから読み込む。

22.23.26 public void write(int b) throws IOException;

DataOutput のメソッド write(22.2.1)の規定を参照のこと。

この操作に対するバイトは,ランダムアクセスファイルの現在のファイルポインタから書き込む。

22.23.27 public void write(byte[] b)
throws IOException, NullPointerException

DataOutput のメソッド write(22.2.2)の規定を参照のこと。

この操作に対するバイト列は,ランダムアクセスファイルの現在のファイルポインタから書き込む。

22.23.28 public void write(byte[] b, int off, int len)
throws IOException, NullPointerException, IndexOutOfBoundsException

DataOutput のメソッド write (22.2.3)の規定を参照のこと。

この操作に対するバイト列は,ランダムアクセスファイルの現在のファイルポインタから書き込む。

22.23.29 public final void writeBoolean(boolean v)
throws IOException

DataOutput のメソッド writeBoolean (22.2.4)の規定を参照のこと。

この操作に対するバイトは,ランダムアクセスファイルの現在のファイルポインタから書き込む。

22.23.30 public final void writeByte(int v) throws IOException

DataOutput のメソッド writeByte (22.2.5)の規定を参照のこと。

この操作に対するバイトは,ランダムアクセスファイルの現在のファイルポインタから書き込む。

22.23.31 public final void writeShort(int v) throws IOException

DataOutput のメソッド writeShort (22.2.6)の規定を参照のこと。

この操作に対するバイト列は,ランダムアクセスファイルの現在のファイルポインタから書き込む。

22.23.32 public final void writeChar(int v) throws IOException

DataOutput のメソッド writeChar (22.2.7)の規定を参照のこと。

この操作に対するバイト列は,ランダムアクセスファイルの現在のファイルポインタから書き込む。

22.23.33 public final void writeInt(int v) throws IOException

DataOutput のメソッド writeInt (22.2.8)の規定を参照のこと。

この操作に対するバイト列は,ランダムアクセスファイルの現在のファイルポインタから書き込む。

22.23.34 public final void writeLong(long v) throws IOException

DataOutput のメソッド writeLong (22.2.9)の規定を参照のこと。

この操作に対するバイト列は,ランダムアクセスファイルの現在のファイルポインタから書き込む。

22.23.35 public final void writeFloat(float v) throws IOException

DataOutput のメソッド writeFloat (22.2.10)の規定を参照のこと。

この操作に対するバイト列は,ランダムアクセスファイルの現在のファイルポインタから書き込む。

22.23.36 public final void writeDouble(double v)
throws IOException

DataOutput のメソッド writeDouble (22.2.11)の規定を参照のこと。

この操作に対するバイト列は,ランダムアクセスファイルの現在のファイルポインタから書き込む。

22.23.37 public final void writeBytes(String s) throws IOException

DataOutput のメソッド writeBytes (22.2.12)の規定を参照のこと。

この操作に対するバイト列は,ランダムアクセスファイルの現在のファイルポインタから書き込む。

22.23.38 public final void writeChars(String s) throws IOException

DataOutput のメソッド writeChars (22.2.13)の規定を参照のこと。

この操作に対するバイト列は,ランダムアクセスファイルの現在のファイルポインタから書き込む。

22.23.39 public final void writeUTF(String str) throws IOException

DataOutput のメソッド writeUTF (22.2.14)の規定を参照のこと。

この操作に対するバイト列は,ランダムアクセスファイルの現在のファイルポインタから書き込む。

22.24 クラス java.io.File

File オブジェクトは,ファイルシステム内のあるファイルを識別するために使用できる文字列であるパスを含む。 パス(path) は,二つの部分,ディレクトリ(directory) 及び ファイル名(file name) で構成されていると仮定する。ディレクトリ(directory) 及び ファイル名(file name) は,そのパスの中にある区切り文字(separator character) として知られる特定の文字の最後のもので分割される。いくつかのメソッドは,パス文字列の部分へのアクセスを提供し,他のメソッドは,パス文字列によって識別されたファイルに作用する。 ファイルへの操作の詳細は,ホスト上のファイルシステムの実装にある程度依存している。 File クラスは,異なった互換性のないファイルシステム間で適度に移植性がある,抽象的な操作を提供する設計が行われている。

public class File {
    public static final String separator =
        System.getProperty("file.separator");
    public static final char separatorChar =
        separator.charAt(0);
    public static final String pathSeparator =
        System.getProperty("path.separator");
    public static final char pathSeparatorChar =
        pathSeparator.charAt(0);
    public File(String path) throws NullPointerException;
    public File(String dirname, String name)
        throws NullPointerException
    public File(File dir, String name)
        throws NullPointerException
    public String toString();
    public boolean equals(Object obj);
    public int hashCode();
    public String getName();
    public String getPath();
    public String getAbsolutePath();
    public String getParent();
    public native boolean isAbsolute();
    public boolean exists() throws SecurityException;
    public boolean canRead() throws SecurityException;
    public boolean canWrite() throws SecurityException;
    public boolean isFile() throws SecurityException;
    public boolean isDirectory() throws SecurityException;
    public long lastModified() throws SecurityException;
    public long length() throws SecurityException;
    public boolean mkdir() throws SecurityException;
    public boolean mkdirs() throws SecurityException;
    public String[] list() throws SecurityException;
    public String[] list(FilenameFilter filter)
        throws SecurityException;
    public boolean renameTo(File dest) throws SecurityException;
    public boolean delete() throws SecurityException;
}

22.24.1 public static final String separator = System.getProperty("file.separator");

この文字列は,フィールド separatorChar でも利用できる値の一つの文字から成っていなければならない。 文字列になっているのは,単に便利さを提供するためだけである。

22.24.2 public static final char separatorChar = separator.charAt(0);

パス文字列の中のこの文字の最後のものが,パスのディレクトリ部とパスのファイル名を分割すると仮定する。 UNIXシステム上では,この文字は,典型的な "/" である。

22.24.3 public static final String pathSeparator = System.getProperty("path.separator");

この文字列は,pathSeparatorChar フィールドでも利用できる値の一つの文字 から成っていなければならない。 文字列になっているのは,単に便利さを提供するためだけである。

22.24.4 public static final char pathSeparatorChar = pathSeparator.charAt(0);

文字列の中のこの文字の最初ものが,しばしば,パス名からホスト名を分割すると仮定する。 UNIXシステム上では,この文字は,典型的な ":" である。

22.24.5 public File(String path) throws NullPointerException

このコンストラクタは,新しく生成したFile を,実引数 path によって示されるパスを表すものとして初期化する。

pathnull ならば,NullPointerException を投げる。

22.24.6 public File(String dirname, String name)
throws NullPointerException

このコンストラクタは,新しく生成したFileを,実引数 dirname によって指定されたディレクトリ部及び実引数 name によって指定されたファイル名によって示されたパスを表すものとして初期化する。 dirnamenulならば,name を,パスとして使用する。 そうでなければ,dirnameseparatorChar (22.24.2) 及び name を連結したものを,パスとして使用する。

namenull ならば,NullPointerException を投げる。

22.24.7 public File(File dir, String name)
throws NullPointerException

このコンストラクタは,新しく生成した File を,File オブジェクト dir によって指定されたディレクトリ部及び実引数 name によって指定されたファイル名によって示されるパスを表すものとして初期化する。

namenull ならば,NullPointerException を投げる。

22.24.8 public String toString()

結果は,この Fileオブジェクトが表すパスと等しい String オブジェクトとする。

Object のメソッド toString (20.1.2)を上書きする。

22.24.9 public boolean equals(Object obj)

実引数が null でなく,かつ実引数の File オブジェクトがこの File オブジェクトと同じパスを表すときにだけ,結果は true とする。 言い替えれば,メソッドgetPath(22.24.12)によって返される文字列が等しいときにだけ,二つの File オブジェクトは等しいということになる。

Object のメソッド equals(20.1.3)を上書きする。

22.24.10 public int hashCode()

この File オブジェクトのハッシュコードは,パス文字列のハッシュコード及び 10進数の 1234321 との排他的論理和と等しい。

this.getPath().hashcode() ^ 1234321

Object のメソッド hashCode(20.1.4) を上書きする。

22.24.11 public String getName()

パス文字列が文字 separatorChar(22.24.2) を含むならば,このメソッドは,パス文字列の中の,区切り文字の最後のものの後ろの部分文字列を返す。 そうでなければ,パス文字列の全体をそのまま返す。

22.24.12 public String getPath()

結果は,この File オブジェクトが表すパスと等しい String とする。

22.24.13 public String getAbsolutePath()

結果は,この File オブジェクトが表すパスを“絶対パス”に変換した結果と等しい String とする。

22.24.14 public String getParent()

パスが親ディレクトリをもつならば,親ディレクトリのパスを表す String を返す。そうでなければ, null を返す。

22.24.15 public boolean isAbsolute()

File オブジェクトによって表されるパスが絶対パス,いくつかのディレクトリが含まれている相対的な名前ではなく,ディレクトリ階層のルートから始まる完結した名前を示す場合にだけ,結果は,true とする。

22.24.16 public boolean exists() throws SecurityException

まず,セキュリティマネージャがあれば,この File オブジェクトが表すパスを実引数としてメソッド checkRead(20.17.19)を呼ぶ。

File オブジェクトのパスによって指定されたファイルを,ファイルシステムが実際に含む時にだけ,結果は, true とする。

22.24.17 public boolean canRead() throws SecurityException

まず,セキュリティマネージャがあれば,この File オブジェクトが表すパスを実引数としてメソッド checkRead(20.17.19)を呼ぶ。

次の両方がtrueならば,結果は, true とする。

22.24.18 public boolean canWrite() throws SecurityException

まず,セキュリティマネージャがあれば,この File オブジェクトが表すパスを実引数としてメソッド checkWrite (20.17.21)を呼ぶ。

次の両方がtrueならば,結果は true とする。

22.24.19 public boolean isFile() throws SecurityException

まず,セキュリティマネージャがあれば,この File オブジェクトが表すパスを実引数としてメソッド checkRead(20.17.19)を呼ぶ。

次の両方がtrueならば,結果は true とする。

22.24.20 public boolean isDirectory() throws SecurityException

まず,セキュリティマネージャがあれば,この File オブジェクトが表すパスを実引数としてメソッド checkRead(20.17.19)を呼ぶ。

次の両方がtrueならば,結果は true とする。

22.24.21 public long lastModified() throws SecurityException

まず,セキュリティマネージャがあれば,この File オブジェクトが表すパスを実引数としてメソッド checkRead(20.17.19)を呼ぶ。

抽象的な変更時刻を返す。 このメソッドが返す二つの値を比較すれば,同じファイルか又は,異なったファイルかどうかがわかる。小さいほうの値が,より早い変更時刻を表す。 抽象的な変更時刻は,メソッドSystem.currentTimeMillis(20.18.6)によって返される時刻と関係がある必要はない。

22.24.22 public long length() throws SecurityException

まず,セキュリティマネージャがあれば,この File オブジェクトが表すパスを実引数としてメソッド checkRead(20.17.19)を呼ぶ。

バイト単位のファイルの長さを返す。

22.24.23 public boolean mkdir() throws SecurityException

まず,セキュリティマネージャがあれば,この File オブジェクトが表すパスを実引数としてメソッド checkWrite(20.17.21)を呼ぶ。

この File オブジェクトによって表されるパスによって指定されたディレクトリの生成を試みる。生成する操作が成功した場合にだけ,結果は,tureとする。

22.24.24 public boolean mkdirs() throws SecurityException

まず,セキュリティマネージャがあれば,この File オブジェクトが表すパスを実引数としてメソッド checkRead(20.17.19)を呼ぶ。

この File オブジェクトを表すディレクトリ名が,親ディレクトリ名(22.24.14)をもつならば,最初に親ディレクトリの生成を試みる。 試みが失敗したら,false を返す。 そうでなければ,一旦親ディレクトリが存在することが確認されるか,又はパスに親がなければ,File オブジェクトによって指定されたディレクトリの生成を試みる。 生成する操作が成功した場合にだけtureを返す。

22.24.25 public String[] list() throws SecurityException

まず,セキュリティマネージャがあれば,この File オブジェクトが表すパスを実引数としてメソッド checkRead(20.17.19)を呼ぶ。

File オブジェクトによって表されるパスが,ファイルシステムのディレクトリと一致しなければ null を返す。そうでなければ,ディレクトリの中のそれぞれ一つのファイルに対応する,文字列の配列を返す(UNIXシステムではを含まない)。それぞれの文字列は,絶対パスではないファイル名とする。 それらの文字列は,配列の中である特別な順番に並んで出現する保証はない。例えば,アルファベット順に並んでいる出現する保証はない。

22.24.26 public String[] list(FilenameFilter filter)
throws SecurityException

まず,セキュリティマネージャがあれば,この File オブジェクトが表すパスを実引数としてメソッド checkRead(20.17.19)を呼ぶ。

File オブジェクトによって表されるパスが,ファイルシステムのディレクトリと一致しなければ null を返す。 そうでなければ,与えられたフィルタを満足する名前をもつ,ディレクトリの中のそれぞれ一つのファイル名に対応する文字列の配列を返す(UNIXシステムでは "." 及び ".." を含まない)。それぞれの文字列は,絶対パスではないファイル名とする。 それらの文字列は,配列の中である特別な順番に並んで出現する保証はない。 例えば,アルファベット順に並んでいる出現する保証はない。 ファイル名は,filterのメソッド accept(22.25.1)を,この File オブジェクト及び名前を実引数として呼んだときの結果の値が true の場合にだけfilterを満足する。

22.24.27 public boolean renameTo(File dest)
throws SecurityException

まず,セキュリティマネージャがあれば,メソッド checkWrite(20.17.21)を,最初は,この File オブジェクトが表すパスを実引数として,次に実引数の dest のパスを実引数として,2度呼び出す。

この File オブジェクトによって表されるパスによって示されたファイルを dest によって示された名前に変更することを試みる。 名前を変更する操作が成功した場合にだけ true を返す。

22.24.28 public boolean delete() throws SecurityException

まず,セキュリティマネージャがあれば,この File オブジェクトが表す パスを実引数としてメソッド checkDelete(20.17.22)を呼ぶ。

この File オブジェクトによって表されたパスによって示されたファイルの削除を試みる。削除する操作が成功した場合にだけtrue を返す。

22.25 インタフェース java.io.FilenameFilter

クラス File のメソッド list(22.24.26)は,実引数として,FilenameFilter インタフェースを 実装したオブジェクトを必要とする。 そのオブジェクトのただ一つの目的は,生成されたディレクトリリストの中に出現すべきファイルを決定する,メソッド accept を提供することとする。

public interface FilenameFilter {
    public boolean accept(File dir, String name);
}

22.25.1 public boolean accept(File dir, String name)

このメソッドは,ディレクトリ dir の中の name で指定された名前のファイルが,クラス File のメソッド list(22.24.26)によって生成される最終的なファイルリストに出現している場合にだけ,true を返さなければならない。

22.26 クラス java.io.FileDescriptor

FileDescriptorは,ファイルシステムの中の実際のファイル,ネットワーク ソケット,又はバイト列の他の入力源若しくは出力先への接続の不透明な表現とする。ファイル記述子の実際の主要な使い方は,それを含んだ FileInputStream(22.4.3)又は FileOutputStream(22.16.3)を生成することとする。

public final class FileDescriptor {
    public static final FileDescriptor in = ...;
    public static final FileDescriptor out = ...;
    public static final FileDescriptor err = ...;
    public boolean valid();
}

22.26.1 public static final FileDescriptor in = ...

標準入力のためのファイル記述子とする。しかし,どちらかといえば System.in (20.18.1)として知られる入力ストリームを使い,普通,このファイル記述子は,直接使われない。

22.26.2 public static final FileDescriptor out = ...

標準出力のためのファイル記述子とする。しかし,どちらかといえば System.out (20.18.2)として知られる出力ストリームを使い,普通,このファイル記述子は,直接使われない。

22.26.3 public static final FileDescriptor err = ...

標準エラー出力のためのファイル記述子とする。しかし,どちらかといえば System.err (20.18.3)として知られる出力ストリームを使い,普通,このファイル記述子は,直接使われない。

22.26.4 public boolean valid()

この FileDescriptor が有効(ファイル又は他の活性なI/O接続への活性な接続を表している)であれば,結果は,trueとする。そうでなければ,結果は, false とする。

22.27 クラス java.io.IOException

クラス IOException は,入出力操作が失敗又は中断されることによって生成される汎用の例外クラスとする。 IOExceptionのサブクラスには,次のものを含む。

EOFException
FileNotFoundException
InterruptedIOException
UTFDataFormatException
public class IOException extends Exception {
    public IOException();
    public IOException(String s);
}

22.27.1 public IOException()

この初期化コンストラクタは,エラーメッセージ文字列として null をもつ IOException を新たに生成する。

22.27.2 public IOException(String s)

この初期化コンストラクタは,新たに生成したIOExceptionを,メソッド getMessage(20.22.3)によって後で検索するためのエラメッセージ文字列 s への参照を保存することによって初期化する。

22.28 クラス java.io.EOFException

EOFException は,入力操作がファイルの終端に到達したことを示すために投げる。 いくつかのJava入力操作では,ファイルの終端の検出に対して,例外を投げることによってではなく,それを識別するための値(例えば -1)を返すことによって対応することに注意のこと。

public class EOFException
 extends IOException {
    public EOFException();
    public EOFException(String s);
}

22.28.1 public EOFException()

この初期化コンストラクタは,エラーメッセージ文字列として null をもつ EOFException を新たに生成する。

22.28.2 public EOFException(String s)

この初期化コンストラクタは,新たに生成したEOFExceptionを,メソッド getMessage(20.22.3)によって後で検索するためのエラメッセージ文字列 s への参照を保存することによって初期化する。

22.29 クラス java.io.FileNotFoundException

FileNotFoundException は,指定されたパス名に対する実際のファイルを一つも開くことができなかったことを示すために投げる。 FileInputStream(22.4.122.4.2) 及び FileOutputStream(22.16.122.16.2)の コンストラクタを参照のこと。

public class FileNotFoundException extends IOException {
    public FileNotFoundException();
    public FileNotFoundException(String s);
}

22.29.1 public FileNotFoundException()

この初期化コンストラクタは,エラーメッセージ文字列として null をもつ FileNotFoundException を新たに生成する。

22.29.2 public FileNotFoundException(String s)

この初期化コンストラクタは,新たに生成したFileNotFoundExceptionを,メソッド getMessage(20.22.3)によって後で検索するためのエラメッセージ文字列 s への参照を保存することによって初期化する。

22.30 クラス java.io.InterruptedIOException

InterruptedIOException は,スレッドの実行を中断されたために,入出力が中断されたことを示すために投げる。 bytesTransferred フィールドは,中断が発生する前に転送に成功したバイト数の長さを表す。

public class InterruptedIOException extends IOException {
    public int bytesTransferred = 0;
    public InterruptedIOException();
    public InterruptedIOException(String s);
}

22.30.1 public int bytesTransferred = 0;

操作が中断される前にI/O操作によって転送されたバイトの数とする。

22.30.2 public InterruptedIOException()

この初期化コンストラクタは,エラーメッセージ文字列として null をもつ InterruptedIOException を新たに生成する。

22.30.3 public InterruptedIOException(String s)

この初期化コンストラクタは,新たに生成したInterruptedIOExceptionを,メソッド getMessage(20.22.3)によって後で検索するためのエラメッセージ文字列 s への参照を保存することによって初期化する。

22.31 クラス java.io.UTFDataFormatException

UTFDataFormatExceptionは,UTF-8形式に変換したデータに問題が発生したとき,それを示すために投げる。 DataInput のメソッド readUTF(22.1.15)を参照。

public class UTFDataFormatException extends IOException {
    public UTFDataFormatException();
    public UTFDataFormatException(String s);
}

22.31.1 public UTFDataFormatException()

この初期化コンストラクタは,エラーメッセージ文字列として null をもつ UTFDataFormatException を新たに生成する。

22.31.2 public UTFDataFormatException(String s)

この初期化コンストラクタは,新たに生成したUTFDataFormatExceptionを,メソッド getMessage(20.22.3)によって後で検索するためのエラメッセージ文字列 s への参照を保存することによって初期化する。


目次 | |