0

ここの11ページのコードを見ていますhttp://www.cs.usfca.edu/~parrt/doc/java/JavaIO-notes.pdf

1つのステートメントに問題があります。割り当ての結果は左辺値だと思いました。したがって、 ((byteRead = inFile.read()) != -1) は (inFile.read()) != -1) と同じになるはずです。出力を見ても、これは当てはまらないようです。だから私の質問は、ステートメント ((byteRead = inFile.read()) != -1) はどのように解析されるのですか?

編集:応答から、割り当ての結果の現在の解釈があったようです。コードフラグメントを置き換えることで何がうまくいかないのか疑問に思っていました

int byteRead;

while((byteRead = inFile.read()) != -1)

outFile.write(byteRead);

while( inFile.read() != -1)

outFile.write( inFile.read());

4

2 に答える 2

0

((byteRead = inFile.read())!= -1)と(inFile.read()!= -1)は、ある意味で同等のブール式です。ただし、最初のものには副作用があります。これは、inFile.read()の結果を変数byteReadに格納します。

参照したコード例では、これをコンパクトなwhileループに使用して、入力から1バイトを読み取り、それを出力に書き込み、inFile.read()が-1(ファイルの終わりに到達したことを意味する)を返すまでそれを続けます。

于 2012-10-18T22:12:23.603 に答える
0

したがって、両方のバージョンのコードを投稿したので、答えは明らかです。

最初のバージョンでは、読み取られた各バイトがbyteReadに割り当てられてから、出力ストリームに書き込まれます。

2番目のバージョンでは、read()でバイトを消費しますが、それを変数に割り当てません。次に、出力ストリームに書き込む別のバイト(ストリーム内の次のバイト)を読み取ります。

したがって、入力ファイルが次の場合:

abcdefghijklmnopqrstuvwxyz

最初のバージョンの出力は次のようになります。

abcdefghijklmnopqrstuvwxyz

2番目の出力は次のようになります。

bdfhjlnqrtuxz
于 2012-10-19T14:37:45.213 に答える