JAVA中read()是如何讀取字元的、read()的返回值為什麼要賦給整型變數?配合available讀取字長時它們的工作原理是什麼?

Marico Hon發表於2018-10-20

最近,本人初學Java中有關檔案輸入輸出時,遇到了一些疑惑,給大家看一段利用read()讀取文件字元並將字元輸出到螢幕的程式碼片段:

其中“測試.txt”文件中存放的字串是“aaaaaa”,執行結果為:

可能很多初學者像我一樣都對while迴圈中的語句有以下疑惑:

1、fin.available()是用來計算可讀檔案的的字長的,應該是恆大於零的,那豈不是死迴圈?(猜想fin.available()是遞減的)

2、fin.read()從文件中讀取的應該是字元,那為什麼賦給整型變數data呢?(猜想read()是將字元轉換為Ascll碼)

為了驗證,於是我在程式碼中加入了以下兩句:

結果顯示:

從輸出結果可以看出:

1、(讀取的位置就像這根豎線一樣向後移動“|aaaaaa->a|aaaaa->aa|aaaa->aaa|aaa->aaaa|aa->aaaaa|a->aaaaaa|”)

一開始起始位置在字串最前端,迴圈中每經過一次read(),讀取的位置就自動向後移一位字元,fin.available()是從讀取的位置向後計算還有多長的位元組可以讀取,因此,fin.available()是一直遞減,直至讀取的位置移到字串末尾,fin.available()變為0,讀取迴圈結束;

2、輸出的data值就是字元的Ascll碼,然後write(data)再將Ascll碼轉換為字元顯示出來;

 

以上純屬個人試驗後的理解,歡迎交流指正。

相關文章