JAVA中read()是如何讀取字元的、read()的返回值為什麼要賦給整型變數?配合available讀取字長時它們的工作原理是什麼?
最近,本人初學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碼轉換為字元顯示出來;
以上純屬個人試驗後的理解,歡迎交流指正。
相關文章
- 交換機是什麼,它的工作原理是什麼
- 在Linux中,什麼是守護程序,它們是如何工作的?Linux
- 一個故事教你看懂什麼是數字證書,它的原理是什麼?它的作用是什麼?
- 在Linux中,什麼是檔案許可權?它們是如何工作的?Linux
- 什麼是光時域反射儀,OTDR的工作原理是什麼反射
- 什麼是SOCKS5代理 它的原理是什麼
- Java 中的 String 為什麼是不可變的?Java
- 滑線變阻器的工作原理是什麼?
- 什麼是爬蟲?爬蟲的工作原理是什麼呢爬蟲
- 什麼是中斷?什麼是異常?它們有何區別?
- CORBA的讀音是什麼?ORB
- Typescript 中的泛型是什麼 - 為什麼使用它們,它們如何與程式碼示例一起使用TypeScript泛型
- 你都用過SpringCloud的哪些元件,它們的原理是什麼?SpringGCCloud元件
- 什麼是實時渲染,實時渲染是如何工作的
- NLA是什麼?NLA的原理是什麼?
- Java是什麼_Java是做什麼的?Java
- 解讀CPU快取,它們如何工作的?快取
- JavaScript 的裝飾器:它們是什麼及如何使用JavaScript
- ITAM是什麼?為什麼它很重要?
- 為什麼Java中繼承多數是有害的Java中繼繼承
- 什麼是資料標註,它的用途是什麼?
- 讀取的img的格式是uint8什麼時候轉化為float32是合理的?UI
- 什麼是Yottachain和YTA幣,它們是什麼關係?AI
- 轉發代理的工作原理是什麼?
- 我們為什麼要閱讀webpack原始碼Web原始碼
- 瀏覽器快取是什麼?它的機制又是什麼?瀏覽器快取
- Java是如何實現跨平臺的?原理是什麼?Java
- 什麼是數字簽名?什麼是數字信封?他們如何使用
- python cv2 read出錯是因為什麼?Python
- [Java] 變數裡存的到底是什麼Java變數
- 什麼是海外伺服器?它的優點是什麼?伺服器
- 在Linux中,Keepalived的工作原理是什麼?Linux
- 為什麼Java中繼承是有害的Java中繼繼承
- 什麼是CDN?CDN的技術原理是什麼?
- vue 中this.$emit()的返回值是什麼?VueMIT
- 解讀:什麼是Java的遞迴演算法?Java遞迴演算法
- 什麼是 BPMN ?為什麼我們要用 BPMN 和工作流 ?
- SSL安全證書的工作原理是什麼