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
のクラスである。サブクラスの関係をはっきりさせるためにここに示している)
Object20.1
interfaceDataInput 22.1
interfaceDataOutput 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
interfaceFileNameFilter 22.25
FileDescriptor 22.26
Throwable 20.22 Exception 20.22IOException 22.27
EOFException 22.28
FileNotFoundException 22.29
InterruptedIOException 22.30
UTFDataFormatException 22.31
java.io.DataInput
インタフェース DataInput
は,バイナリストリームからバイト列を読み込み,それらのデータを任意のJavaのプリミティブ型に再構成する方法を提供する。
Java修正版UTF-8形式のデータから String
を再構成するための機能もある。
インタフェース DataOutput
(22.2)は,インタフェース DataInput
で読み戻すのに適しているバイナリ出力データの生成を支援する。
インタフェース DataInput
は,クラス DataInputStream
(22.11)及びRandomAccessFile
(22.23)によって実装されている。
public interfaceDataInput
{ public voidreadFully
(byte[] b) throws IOException, NullPointerException; public voidreadFully
(byte[] b, int off, int len) throws IOException, NullPointerException, IndexOutOfBoundsException; public intskipBytes
(int n) throws IOException; public booleanreadBoolean
() throws IOException; public bytereadByte
() throws IOException; public intreadUnsignedByte
() throws IOException; public shortreadShort
() throws IOException; public intreadUnsignedShort
() throws IOException; public charreadChar
() throws IOException; public intreadInt
() throws IOException; public longreadLong
() throws IOException; public floatreadFloat
() throws IOException; public doublereadDouble
() throws IOException; public StringreadLine
() throws IOException; public StringreadUTF
() throws IOException; }
一般的に,このインタフェースの中の読み込みルーチンは,期待する数のバイトを読み込む前にファイルの終わりに達すると,EOFException
(IOException
の一種)を投げる。
ファイルの終わり以外の理由で読み込みに失敗した場合は,EOFException
ではなく IOException
を投げる。
特に,入力ストリームが閉じられている(22.3.6) 時には,IOException
を投げる。
22.1.1public void readFully(byte[] b)
throws IOException, NullPointerException;
readFully(b)
は,入力ストリームからいくつかのバイトを読み,それをバッファ配列 b
に格納する。
読まれたバイト数は,配列 b
の長さに等しい。
b.length
だけのバイトが有効なとき。この場合は,正常に戻る。
EOFException
を投げる。
EOFException
ではなく IOException
を投げる。
b
が null
ならば,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
バイト分を読み込む。
このメソッドは,次のいずれかの状態が発生するまでブロックする。
len
バイト分が有効なとき。この場合は,正常に戻る。
EOFException
を投げる。
EOFException
ではなく IOException
を投げる。
b
が null
ならば,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) を使用できる。
java.io.DataOutput
DataOutput
インタフェースは,任意のJavaのプリミティブ型を,バイト列に変換しバイナリストリームに書き出す。
String
をJava修正版UTF-8形式に変換して書き出す機能ももつ。
インタフェースが書き出したバイナリ出力からJavaのデータを読み込み,再構成するためには,DataInput
インタフェースを用いる(22.1)。
DataOutput
インタフェースは,クラス DataOutputStream
(22.21)及びクラス RandomAccessFile
(22.23)で実装されている。
public interfaceDataOutput
{ public voidwrite
(int b) throws IOException; public voidwrite
(byte[] b) throws IOException, NullPointerException; public voidwrite
(byte[] b, int off, int len) throws IOException, NullPointerException, IndexOutOfBoundsException; public voidwriteBoolean
(boolean v) throws IOException; public voidwriteByte
(int v) throws IOException; public voidwriteShort
(int v) throws IOException; public voidwriteChar
(int v) throws IOException; public voidwriteInt
(int v) throws IOException; public voidwriteLong
(long v) throws IOException; public voidwriteFloat
(float v) throws IOException; public voidwriteDouble
(double v) throws IOException; public voidwriteBytes
(String s) throws IOException, NullPointerException; public voidwriteChars
(String s) throws IOException, NullPointerException; public voidwriteUTF
(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
b
が null
ならば,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
は,配列 b
の len
バイトを出力ストリームに書き出す。
b
が null
ならば,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バイトを出力ストリームに書き出す。
実引数 v
が true
ならば (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
は,文字列 s
のそれぞれの文字をバイトに変換し,その順番に出力ストリームに書き出す。
が null
ならば,NullPointerException
を投げる。
がゼロならば,書き出しを行わない。そうでなければ, 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
は,文字列 s
のそれぞれの文字を2バイトに変換し,その順番に出力ストリームに書き出す。
が null
ならば,NullPointerException
を投げる。
がゼロならば,書き出しを行わない。そうでなければ,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バイトに変換し,その順番に出力ストリームに書き出す。
s
が null
ならば,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
を返す。
java.io.InputStream
入力ストリームは,いくつかのソースからバイトの入力を可能にする。
public abstract classInputStream
{ public abstract intread
() throws IOException; public intread
(byte[] b) throws IOException, NullPointerException; public intread
(byte[] b, int off, int len) throws IOException, NullPointerException, IndexOutOfBoundsException; public longskip
(long n) throws IOException; public intavailable
() throws IOException; public voidclose
() throws IOException; public voidmark
(int readlimit); public voidreset
() throws IOException; public booleanmarkSupported
(); }
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
に格納する。正しく読み込んだバイト数を整数値で返す。
このメソッドは,データの入力が可能であるか,ファイルの終わりに到達するか,又は例外が投げられるまでブロックする。
b
が null
ならば,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
を投げる。
クラス InputStream
の read(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
バイトの読込みを試みるが,それより少ない数(ゼロもある)を読み込むことがある。それから,正しく読み込んだバイト数を整数値で返す。
このメソッドは,データの入力が可能であるか,ファイルの終わりに到達するか,又は例外が投げられるまでブロックする。
b
が null
ならば,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)
メソッド markSupported
が true
を返すときに,ストリームは,何らかの方法によって mark
が呼ばれた後に読み込まれたすべてのバイトを記憶しておき, メソッドreset
が呼び出された時にはいつでも,それらの同じバイトを再び供給できるものとして準備する。
しかしながら,ストリームは,reset
が呼び出される前に,readlimit
バイトよりも多く読み込まれたすべてのバイトを記憶しておく必要はない。
クラス InputStream
のメソッド mark
は,何もしない。
22.3.8
public void reset() throws IOException
markSupported
が true
を返すならば, markSupported
が false
を返すならば,
クラス InputStream
のメソッド reset
は,常に IOException
を投げる。
22.3.9
public boolean markSupported()
markSupported
が true
を返すならば,そのストリームは, mark
(22.3.7) 及び reset
(22.3.8) 処理を支援している。
すべての InputStream
のインスタンスに対して,このメソッドは,呼び出されたときはいつでも,一貫して同じ真偽値を返さなければならない。
クラス InputStream
のメソッド markSupported
は,false
を返す。
java.io.FileInputStream
ファイル入力ストリームは,入力バイトをファイルシステム内のファイルから得る。 どんなファイルが有効かは,ホスト環境に依存する。
public classFileInputStream
extends InputStream { publicFileInputStream
(String path) throws SecurityException, FileNotFoundException; publicFileInputStream
(File file) throws SecurityException, FileNotFoundException; publicFileInputStream
(FileDescriptor fdObj) throws SecurityException; public native intread
() throws IOException; public intread
(byte[] b) throws IOException, NullPointerException; public intread
(byte[] b, int off, int len) throws IOException, NullPointerException, IndexOutOfBoundsException; public native longskip
(long n) throws IOException; public native intavailable
() throws IOException; public native voidclose
() throws IOException; public final FileDescriptorgetFD
() throws IOException; protected voidfinalize
() 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
は,実際のファイルとの接続を後始末するために,終了化を使用している。
java.io.PipedInputStream
パイプ入力ストリームは,パイプ出力ストリームと接続しなければならない。
したがって,パイプ入力ストリームは,パイプ出力ストリームに書き出されるバイト列ならば何でも提供する。
典型的には,一つのスレッドが,PipedInputStream
オブジェクトからデータを読み込み,他のあるスレッドが,対応する PipedOutputStream
(22.17) へデータを書き出す。
両方のオブジェクトを単一のスレッドで使うことは,デッドロックになることがあるので推奨できない。
パイプ入力ストリームは,制限内で出力処理から入力処理を切り離しているバッファを含む。
public classPipedInputStream
extends InputStream { publicPipedInputStream
(PipedOutputStream src) throws IOException; publicPipedInputStream
(); public voidconnect
(PipedOutputStream src) throws IOException; public intread
() throws IOException; public intread
(byte[] b, int off, int len) throws IOException, NullPointerException, IndexOutOfBoundsException; public voidclose
() 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) を上書きする。
java.io.ByteArrayInputStream
ByteArrayInputStream
は,ストリームから読み込まれるバイト列を格納する内部バッファをもつ。
内部カウンタは,メソッド read
が次に読むべきバイトの位置を保持する。
StringBufferInputStream
(22.7)を参照のこと。
public classByteArrayInputStream
extends InputStream { protected byte[]buf
; protected intpos
; protected intcount
; publicByteArrayInputStream
(byte[] buf); publicByteArrayInputStream
(byte[] buf, int offset, int length); public intread
() throws NullPointerException, IndexOutOfBoundsException; public intread
(byte[] b, int off, int len) throws NullPointerException, IndexOutOfBoundsException; public longskip
(long n); public intavailable
(); public voidreset
(); }
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
pos
が count
と等しければ,ファイルの終りを示すために -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
pos
が count
と等しければ,ファイルの終りを示すために -1
を返す。
そうでなければ,読み込んだバイト数 k
は, len
又は count-pos
の小さいほうに等しい。
k
が正であれば, buf[pos]
から buf[pos+k-1]
のバイトを System.arraycopy
(20.18.16)と同じ方法で b[off]
から b[off+k-1]
に複写する。
値 k
を pos
に加算し,k
を返す。
InputStream
の read
(22.3.3)を上書きする。
22.6.8
public long skip(long n)
実際にスキップされるバイト数 k
は, n
又は count-pos
の小さいほうに等しい。
値 k
を pos
に加算し,k
を返す。
InputStream
の skip
(22.3.4)を上書きする。
22.6.9
public int available()
InputStream
の available
(22.3.5)を上書きする。
22.6.10
public void reset()
InputStream
のメソッド reset
(22.3.8)を上書きする。
java.io.StringBufferInputStream
StringBufferInputStream
は,そのストリームから読み込まれるバイト列を格納する内部バッファをもつ。
ある内部カウンタが,メソッド read
によって供給される次のバイトの位置を保持する。
ByteArrayInputStream
(22.6)を参照のこと。
public classStringBufferInputStream
extends InputStream { protected Stringbuffer
; protected intpos
; protected intcount
; publicStringBufferInputStream
(String s) throws NullPointerException; public intread
(); public intread
(byte[] b, int off, int len) throws NullPointerException, IndexOutOfBoundsException; public longskip
(long n); public intavailable
(); public voidreset
(); }
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()
pos
が count
と等しければ,ファイルの終りを示すために -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
pos
が count
と等しければ,ファイルの終りを示すために -1
を返す。
そうでなければ,読み込んだバイト数 k
は, len
又は count-pos
の小さいほうに等しい。
k
が正であれば buffer[pos]
から b[off+k-1]
のバイト列を System.arraycopy
(20.18.16)と同じ方法で b[off]
から buffer[pos+k-1]
に複写する。
値 k
を pos
に加算し,k
を返す。
InputStream
の read
(22.3.3)メソッドを上書きする。
22.7.7
public long skip(long n)
実際にスキップされるバイト数 k
は, n
又は count-pos
の小さいほうに等しい。
値 k
に, pos
を加算し,k
を返す。
InputStream
の skip
(22.3.4)メソッドを上書きする。
22.7.8
public int available()
InputStream
の available
(22.3.5)メソッドを上書きする。
22.7.9
public void reset()
InputStream
のメソッド reset
(22.3.8) を上書きする。
java.io.SequenceInputStream
SequenceInputStream
は,複数の入力ストリームの論理的な結合を表現する。
順序付けられた入力ストリームの集合から始まり,最初のストリームからファイルの終わりに達するまでを読み込む。
その次に2番目のストリーム,そしてまたその次と,含まれる入力ストリームの最後のファイルの終わりに達するまで読み込む。
public classSequenceInputStream
extends InputStream { publicSequenceInputStream
(Enumeration e); publicSequenceInputStream
(InputStream s1, InputStream s2); public intread
() throws IOException; public intread
(byte[] buf, int pos, int len) throws IOException, NullPointerException, IndexOutOfBoundsException; public voidclose
() 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
InputStream
の read
(22.3.1)を実装する。
22.8.4
public int read(byte[] buf, int pos, int len)
throws IOException, NullPointerException, IndexOutOfBoundsException
InputStream
の read
(22.3.3)を上書きする。
22.8.5
public void close() throws IOException
この SequenceInputStream
をクローズする。
クローズされた SequenceInputStream
は,入力操作を行うことも再びオープンすることもできない。
このストリームが Enumeration
から生成されている場合は,そのEnumeration
から要求されいるすべての残りの要素は,メソッド close
が戻る前にクローズされる。
InputStream
の close
(22.3.6)を上書きする。
java.io.FilterInputStream
FilterInputStream
は,基本的なデータの入力源として使用するある別の入力ストリームを含んでおり,そのデータを一定の方法で加工したり,付加的な機能を提供したりする。
FilterInputStream
自体は,InputStream
のすべてのメソッドを,すべての要求を自らが保持する入力ストリームに転送するだけのメソッドで,単に上書きしているだけである。
FilterInputStream
のサブクラスは,これらのメソッドのいくつかをさらに上書きしてもよいし,メソッド又はフィールドを追加してもよい。
public classFilterInputStream
extends InputStream { protected InputStreamin
; protectedFilterInputStream
(InputStream in); public intread
() throws IOException; public intread
(byte[] b) throws IOException, NullPointerException; public intread
(byte[] b, int off, int len) throws IOException, NullPointerException, IndexOutOfBoundsException; public longskip
(long n) throws IOException; public intavailable
() throws IOException; public voidclose
() throws IOException; public voidmark
(int readlimit); public voidreset
() throws IOException; public booleanmarkSupported
(); }
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()
を実行し,その結果を返す。
InputStream
の read
(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)
を実行し,その結果を返す。
InputStream
の read
(22.3.3)を上書きする。
22.9.6
public long skip(long n) throws IOException
このメソッドは,単に in.skip()
を実行し,その結果を返す。
InputStream
の skip
(22.3.4)を上書きする。
22.9.7
public int available() throws IOException
このメソッドは,単に in.available()
を実行し,その結果を返す。
InputStream
の available
(22.3.5)を上書きする。
22.9.8
public void close() throws IOException
このメソッドは,単に in.close()
を実行し,その結果を返す。
InputStream
の close
(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()
を実行し,その結果を返す。
InputStream
の reset
(22.3.8)を上書きする。
22.9.11
public boolean markSupported()
このメソッドは,単に in.markSupported()
を実行し,その結果を返す。
InputStream
の markSupported
(22.3.9)を上書きする。
java.io.BufferedInputStream
BufferedInputStream
は,他の入力ストリームに機能,つまり,入力を バッファリングする能力並びにメソッドmark
及びreset
を支援する能力を追加する。
BufferedInputStream
が生成されるときに,内部的なバッファ配列が生成される。
そのストリームからバイトが読み込み又はスキップされた時,内部的なバッファは,それに含まれる入力ストリームから必要に応じて補充される,一度に多くのバイトが補充される。
mark
操作は,入力ストリームの中の位置を記憶し,reset
操作は,最も最近に実行した mark
操作後に読み込まれたすべてのバイトが,含まれる入力ストリームから新たなバイトが読まれる前に,再度読み込まれるものとする。
public classBufferedInputStream
extends FilterInputStream { protected byte[]buf
; protected intcount
= 0; protected intpos
= 0; protected intmarkpos
= -1; protected intmarklimit
= 0; publicBufferedInputStream
(InputStream in); publicBufferedInputStream
(InputStream in, int size); public intread
() throws IOException; public intread
(byte[] b) throws IOException, NullPointerException; public intread
(byte[] b, int off, int len) throws IOException, NullPointerException, IndexOutOfBoundsException; public longskip
(long n) throws IOException; public intavailable
() throws IOException; public voidmark
(int readlimit); public voidreset
() throws IOException; public booleanmarkSupported
(); }
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]
までのすべてのバイトは,バッファ配列の中に保持されていなければならない (count
,pos
, 及び 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
のメソッド read
(22.3.2)を参照のこと。
のメソッド 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
を実引数の値に設定し, markpos
を pos
の値に設定する。
FilterInputStream
のメソッド mark
(22.9.9)を上書きする。
22.10.14
public void reset() throws IOException
InputStream
のメソッド reset
の一般的な規則(22.3.8)を参照のこと。
markpos
が -1
であれば(マークされていない,あるいは,マークが無効になった場合),IOException
を投げる。
そうでなければ,pos
を markpos
と同じ値に設定する。
FilterInputStream
のメソッド reset
(22.9.10)を上書きする。
22.10.15
public boolean markSupported()
このメソッドは, true
を返す ( BufferedInputStream
は,常に mark
を支援する)。
FilterInputStream
の markSupported
(22.9.11)メソッドを上書きする。
java.io.DataInputStream
データ入力ストリームは,入力源からバイト列を読み,特定の文字の並びを,さまざまな型のデータを表現するものとして解釈する機能を提供する。
public classDataInputStream
extends FilterInputStream implements DataInput { publicDataInputStream
(InputStream in); public final voidreadFully
(byte[] b) throws IOException, NullPointerException; public final voidreadFully
(byte[] b, int off, int len) throws IOException, NullPointerException, IndexOutOfBoundsException; public final intskipBytes
(int n) throws IOException; public final booleanreadBoolean
() throws IOException; public final bytereadByte
() throws IOException; public final intreadUnsignedByte
() throws IOException; public final shortreadShort
() throws IOException; public final intreadUnsignedShort
() throws IOException; public final charreadChar
() throws IOException; public final intreadInt
() throws IOException; public final longreadLong
() throws IOException; public final floatreadFloat
() throws IOException; public final doublereadDouble
() throws IOException; public final StringreadLine
() throws IOException; public final StringreadUTF
() throws IOException; public final static StringreadUTF
(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)のものと同じとする。
java.io.LineNumberInputStream
LineNumberInputStream
は,他の入力ストリームに行数を数える機能を追加する。
LineNumberInputStream
の生成時には,行番号カウンタをゼロに設定する。
ストリームからバイト列を読み込み又はスキップするときに,改行記号(\n
,\r
,又は\r\n
)が出現するたびにカウンタを増加させる。
同時に該当する改行記号を,単一の文字 "\n"
に変換する。
メソッド getLineNumber
は,カウンタの現在の値を返し,メソッド setLineNumber
は,カウンタを与えられた値に設定する。
含まれる入力ストリームが mark
操作を支援している場合は,LineNumberInputStream
も mark
操作を支援する。
mark
操作は,行番号カウンタを記憶しておき, reset
操作は, mark
操作で記憶した値にカウンタを設定する。
public classLineNumberInputStream
extends FilterInputStream { publicLineNumberInputStream
(InputStream in); public intread
() throws IOException; public intread
(byte[] b) throws IOException, NullPointerException; public intread
(byte[] b, int off, int len) throws IOException, NullPointerException, IndexOutOfBoundsException; public longskip
(long n) throws IOException; public intavailable
() throws IOException; public voidmark
(int readlimit); public voidreset
() throws IOException; public intgetLineNumber
(); public voidsetLineNumber
(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"
を返す。
のメソッド 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 によって決まる。
setLineNumber
が最後に実行された場合は, setLineNumber
の実引数を n とし,現在の行番号は,とする。
- reset
が最後に実行された場合は, mark
によって保持されていた行番号を m とし,現在の行番号は,とする。
- LineNumberInputStream
の生成が最後に実行された場合(つまり,他の事象が発生していない場合)は,現在の行番号は, k とする。
このルールに従えば, 最初の行の文字が読み込まれる際には,現在の行番号は, 0
とし,最初の行の改行文字が読み込まれた後には, 1
とする。
22.12.10
public void setLineNumber(int lineNumber)
java.io.PushbackInputStream
PushbackInputStream
は,他の入力ストリームに1バイトをプッシュバック又はアンリードする機能を追加する。
これは,あるコード中で,特定のバイト値によって区切られるがそのバイト数は事前にわからないデータを読む場合に有用である。
つまり,終端バイトを読んだ後,コードは, 入力ストリームからの次のread
操作がプッシュバックされたバイトを再び読み込み,それを“アンリード”することができる。
例えば,識別子を構成する文字列は,演算子文字を表すバイトによって区切られる場合がある。
識別子を読むことだけが仕事であるメソッドは,演算子に出会うまで読み込み,その演算子を再読み込みできるものとしてプッシュバックすることができる。
public classPushbackInputStream
extends FilterInputStream { protected intpushBack
= -1; publicPushbackInputStream
(InputStream in); public intread
() throws IOException; public intread
(byte[] bytes, int offset, int length) throws IOException, NullPointerException, IndexOutOfBoundsException; public voidunread
(int ch) throws IOException; public intavailable
() throws IOException; public booleanmarkSupported
(); }
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バイト以上をプッシュバックすることが許されていなければ)。そうでない場合は, b
を pushBack
に代入してバイト値 b
をプッシュバックする。
22.13.6
public int available() throws IOException
InputStream
のメソッド available
の一般的な規則(22.3.1)を参照のこと。
このメソッドは,最初に含まれる入力ストリームのメソッド available
を呼ぶ。
pushBack
が -1
ならば,その結果を返す。
そうでなければ,その結果に 1
を加えた値を返す。
FilterInputStream
の available
(22.9.7)メソッドを上書きする。
22.13.7
public boolean markSupported()
このメソッドは, false
を返す(PushbackInputStream
は, mark
を支援しない)。
java.io.StreamTokenizer
StreamTokenizer
は,ある入力ストリームを取り,それを“トークン”に解析分割し,トークンを一度に一つ読むことができるものとする。
この解析分割のプロセスは,さまざまな状態に設定できるテーブル及びいくつかのフラグによって制御され,識別子,数字,引用された文字列及び注釈を標準の様式で認識することができる。
public classStreamTokenizer
{ public static final intTT_EOF
= -1; public static final intTT_EOL
= '\n'; public static final intTT_NUMBER
= -2; public static final intTT_WORD
= -3; public intttype
; public Stringsval
; public doublenval
; publicStreamTokenizer
(InputStream in); public voidresetSyntax
(); public voidwordChars
(int low, int hi); public voidwhitespaceChars
(int low, int hi); public voidordinaryChars
(int low, int hi); public voidordinaryChar
(int ch); public voidcommentChar
(int ch); public voidquoteChar
(int ch); public voidparseNumbers
(); public voideolIsSignificant
(boolean flag); public voidslashStarComments
(boolean flag); public voidslashSlashComments
(boolean flag); public voidlowerCaseMode
(boolean flag); public intnextToken
() throws IOException; public voidpushBack
(); public intlineno
(); public StringtoString
(); }
入力ストリームから読まれるおのおののバイトは, "\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_EOF
,TT_EOL
,TT_NUMBER
,TT_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
は,次のデフォルトの状態に初期化される。
"A"
から "Z"
, "a"
から "z"
及び 0xA0
から 0xFF
のすべてのバイト値を,アルファベットと見なす。
0x00 から 0x20
までのすべてのバイト値を,空白類と見なす。
"/"
を,注釈文字とする。
"\'"
及び,ダブルクォーテーション """
を,文字列引用文字とする。
//
の注釈及び /*
の注釈は,認識しない。 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
は,実引数flag
がtrue
のときにだけ,以降,改行をトークンとして認識する。
22.14.18
public void slashStarComments(boolean flag)
この StreamTokenizer
は,実引数flag
がtrue
のときにだけ,以降,/*
及び */
で区切られネストしていないJavaスタイルの注釈を認識し読み飛ばす。
22.14.19
public void slashSlashComments(boolean flag)
この StreamTokenizer
は,実引数flag
がtrue
のときにだけ,以降,//
で始まるJavaスタイルの行終端注釈を認識し読み飛ばす。
22.14.20
public void lowerCaseMode(boolean flag)
この StreamTokenizer
は,実引数flag
がtrue
のときにだけ,以降, 識別子の中の文字を英小文字に変換する。
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) ことに注意のこと。
したがって,メソッド lineno
を pushBack
の後,次のnextToken
の呼出しの前に呼び出した場合,正しくない行番号が返されることがある。
22.14.23
public int lineno()
現在のトークンが出現した行の行番号を返す。
入力ストリーム中の最初のトークンが改行でなければ,最初のトークンは,行 1
に出現するものとする。
改行のトークンは,改行ではなく,行の先頭にあるものとして扱う。
つまり,入力ストリーム中の,最初の改行のトークンは,行 2
にあるものとする。
22.14.24
public String toString()
現在のトークン及び現在の行番号を,次のような形式の文字列に変換する。
"Token[x], line m"
ここで,m は,10進数で表した現在の行番号とする。さらに x は,現在のトークンの型に依存する。
TT_EOF
ならば,x は, "EOF"
とする。
TT_EOL
ならば,x は, "EOL"
とする。
TT_WORD
ならば,x は, sval
(22.14.6)の現在の値とする。
TT_NUMBER
ならば,x は, "n="
の後に続く nval
(22.14.7)の現在の値を文字列 (20.10.15)に変換した結果とする。
Object
(20.1.2)のメソッド toString
を上書きする。
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)の呼出しと同じ効果をもたなければならない。
クラス OutputStream
の write(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]
が最後のバイトとする。
b
が null
ならば,NullPointerException
を投げる。
off
が負であるとき,len
が負であるとき,又はoff+len
が配列 b
の要素数より大きいとき,IndexOutOfBoundsException
を投げる。
バイトを何らかの理由で書き込むことができなければ,IOException
を投げる。
特に,出力ストリームが閉じられている (22.15.5)場合は, IOException
を投げる。
クラス OutputStream
の write(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
は,何もせずにそのまま返る。
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
は,実在ファイルへの接続を後始末するために終了化子を用いる。
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)。
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]
を内部バッファに追加する。
b
が null
ならば,NullPointerException
を投げる。
off
が負の値であるとき,len
が負であるとき,又は off+len
が配列 b
よりも大きいとき,IndexOutOfBoundsException
を投げる。
OutputStream
のメソッド write
(22.15.3)を上書きする。
22.18.7
public int size()
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
の現在の値に等しい。
その初期における内容は,それまでにストリームに書き込まれたバイト列,すなわち buf
の 0
から 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)
out
が this
と同じ場合,その効果は,単に,バッファに現在の内容の複製を追加することであり,それによってバッファされたバイト列の数は倍になることに注意のこと。
これは,特に有効な効果ではないことがあるが,重要な点は,この操作が,無限ループに入るよりは,実用的な効果をもちながら,“終了する”ということである。
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
OutputStream
のメソッド flush
(22.15.4)を上書きする。
22.19.7
public void close() throws IOException
OutputStream
のメソッドclose
(22.15.5)を上書きする。
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)の一般的な規定を参照のこと。
FilterOutputStream
の write
(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)を上書きする。
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
この操作に対するバイトを,含まれる出力ストリームに書き込む。例外を投げなければ,書き込みカウンタ 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
は,s
の2
倍の長さだけ増加する。
22.21.16
public final void writeUTF(String str)
throws IOException, NullPointerException, IndexOutOfBoundsException
DataOutput
のメソッド writeUTF
(22.2.14)の一般的な規定を参照のこと。
この操作に対するバイト列を,それに含まれる出力ストリームに書き込む。例外を投げなければ,書き込みカウンタ written
は,出力ストリームに書き込まれたバイト列の総数だけ増加する。
これは,小さくて長さ s
に 2
を加えたものであり,また大きくても長さ s
の3
倍に 2
を加えたものとする。
22.21.17
public final int size()
メソッドsize
は, 書き込みカウンタ written
の現在の値,すなわちこれまでに書き込んだバイト列の数を返す。
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
を保存することによって初期化する。このストリームは,autoflush
が true
の時にだけ,自動フラッシュとなる。
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)と同じ方法で,含まれる出力ストリームに書き込む。
s
が null
ならば,n
,u
,l
,l
の4文字の下位バイトを,含まれる出力ストリームに書き込む。
22.22.10
public void print(char[] s) throws NullPointerException
文字配列 s
の中の文字の下位バイトを,順番に,メソッド write
(22.22.3)と同じ方法で,含まれる出力ストリームに書き込む。
s
が null
ならば,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)と同じ方法で,含まれる出力ストリームに書き込む。
s
が null
ならば,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)と同じ方法で,含まれる出力ストリームに書き込む。
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
は,ファイルの開始位置とする。
pos
が 0
より小さいか若しくはファイルの長さよりも大きい,又はなんらかの理由でそのファイルポインタが読み込みできない場合は,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)の規定を参照のこと。
この操作に対するバイト列は,ランダムアクセスファイルの現在のファイルポインタから書き込む。
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
によって示されるパスを表すものとして初期化する。
path
が null
ならば,NullPointerException
を投げる。
22.24.6
public File(String dirname, String name)
throws NullPointerException
このコンストラクタは,新しく生成したFile
を,実引数 dirname
によって指定されたディレクトリ部及び実引数 name
によって指定されたファイル名によって示されたパスを表すものとして初期化する。
dirname
がnul
ならば,name
を,パスとして使用する。
そうでなければ,dirname
,separatorChar
(22.24.2) 及び name
を連結したものを,パスとして使用する。
name
が null
ならば,NullPointerException
を投げる。
22.24.7
public File(File dir, String name)
throws NullPointerException
このコンストラクタは,新しく生成した File
を,File
オブジェクト dir
によって指定されたディレクトリ部及び実引数 name
によって指定されたファイル名によって示されるパスを表すものとして初期化する。
name
がnull
ならば,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)を呼ぶ。
22.24.18
public boolean canWrite() throws SecurityException
まず,セキュリティマネージャがあれば,この File
オブジェクトが表すパスを実引数としてメソッド checkWrite
(20.17.21)を呼ぶ。
22.24.19
public boolean isFile() throws SecurityException
まず,セキュリティマネージャがあれば,この File
オブジェクトが表すパスを実引数としてメソッド checkRead
(20.17.19)を呼ぶ。
22.24.20
public boolean isDirectory() throws SecurityException
まず,セキュリティマネージャがあれば,この File
オブジェクトが表すパスを実引数としてメソッド checkRead
(20.17.19)を呼ぶ。
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
を返す。
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
を返さなければならない。
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
とする。
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
への参照を保存することによって初期化する。
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
への参照を保存することによって初期化する。
java.io.FileNotFoundException
FileNotFoundException
は,指定されたパス名に対する実際のファイルを一つも開くことができなかったことを示すために投げる。
FileInputStream(
22.4.1,22.4.2)
及び FileOutputStream(
22.16.1,22.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
への参照を保存することによって初期化する。
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
への参照を保存することによって初期化する。
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
への参照を保存することによって初期化する。