0

このコードがどのように機能するかを理解するのに苦労しています。バイトストリームを使用しています:

in = new FileInputStream("xanadu.txt");
out = new FileOutputStream("x.txt");
int c;

while((c = in.read()) != -1) {
    out.write(c);   
}

私が理解していないのはwhileループです。入力ストリームは、インデックスがインクリメントされる配列のように機能し、そのインデックスは出力ストリームに渡されますか?

誰かが説明できれば、それは大歓迎です。

4

2 に答える 2

1

read()ストリームから 1 バイトを読み取ります。このバイトはint値として返されます (Java には符号なしバイトがないため、0 から 255)。ストリームから受信した場合-1、それはストリームの終わりEOS(を使用した場合のファイルの終わり)を意味しますFileInputStream


while ループについて:

while((c = in.read()) != -1)

in.read()が最初に実行され、値が に代入されてからc、ブール値の比較c != -1が while ループ引数として評価されます。

于 2013-03-03T17:05:07.487 に答える
1

in.read() は、for ループのように機能すると思います。ファイル内の次のバイトを返し、反復子を 1 増やします。テキスト「Hello World」を含むファイルでは、in.read() は最初に「H」を生成します。in.read() は、ファイルの最後まで「e」などを生成します。

ファイルの最後で、in.read() はそれ以上バイトを読み取ることができません。この関数は、-1 を返すことによって、この状態から正常に終了するように設計されています。もちろん、バイトの値に -1 を指定することはできません。したがって、このメソッドから -1 の値を取得するときはいつでも、それがファイルの最後にあることを確認できます。

while ((cin=in.read())!=-1){} は 2 つのことを行います。まず、c を in.read(); に等しく設定します。次に、-1 に等しいかどうかをチェックします。そうでない場合は、ループ本体に入ります。括弧内のものは (必ずしも算術演算でなくても) 常に括弧外のものより先に評価されます。

于 2013-03-03T17:09:22.147 に答える