JWorld@TW the best professional Java site in Taiwan
      註冊 | 登入 | 全文檢索 | 排行榜  

» JWorld@TW » Java 新手區  

按列印兼容模式列印這個話題 列印話題    把這個話題寄給朋友 寄給朋友    訂閱主題
reply to postflat modego to previous topicgo to next topic
本主題所含的標籤
無標籤
作者 Re:java I/O程式碼疑惑 [Re:dragonraja]
jimwayne





發文: 220
積分: 0
於 2013-11-19 15:14 user profilesend a private message to userreply to postreply to postsearch all posts byselect and copy to clipboard. 
ie only, sorry for netscape users:-)add this post to my favorite list
1、單純只從迴圈的觀點觀察為何是無窮迴圈,可以注意到第 9 行改過一次 i 的值,預期應該會是 i=1。
接著進入 while 迴圈,while 迴圈做了印出 i 的字元的動作,然後就直接做下一次的 while 檢查
因為 i 在迴圈內從來沒有被改過內容,因此從 11 行到 14 行(扣掉被註解的 13 行)i 永遠是 1
while 迴圈檢查 1 != -1 當然是恆為真,於是就無窮迴圈了。

2、從 FileInputStream 的觀點來說,read() 的動作是從來源讀「下一個 byte」,呼叫一次就只讀一個
所以如果只呼叫一次 read(),就只有讀出第一個 byte,第二個 byte 以後的資料一直都不會被讀出來。
因此要正確把檔案內容全部讀完,就必須在 while 迴圈裡面一直呼叫 read() 的方法
才有辦法一直要求 FileInputStream 從檔案中拿出後面的資料。

可以想像 FileInputStream 裡面會自己產生一個指標,一開始指標指向檔案的第 0 個 byte
當呼叫過一次 read() 之後,指標會把目前指向的 byte 吐出去,然後往後移動到第 1 個 byte
再呼叫一次 read() 時,就會把目前指向的第 1 個 byte 吐出去,往後移動到第 2 個 byte
以此類推。
因此在 while 迴圈裡一直呼叫 read(),最終可以把整個檔案讀取完。

建議您應該稍微看一下官方文件的描述~
FileInputStream.read()


jimwayne edited on 2013-11-19 15:18
reply to postreply to post
Java 工作者,但仍然是個初心者.....
話題樹型展開
人氣 標題 作者 字數 發文時間
740 java I/O程式碼疑惑 dragonraja 873 2013-11-19 14:52
634 Re:java I/O程式碼疑惑 jimwayne 761 2013-11-19 15:14
615 Re:java I/O程式碼疑惑 sir_ap 143 2013-11-19 15:19
562 Re:java I/O程式碼疑惑 haur576 321 2013-11-19 20:52
621 Re:java I/O程式碼疑惑 SPeeD 83 2013-11-19 15:23
629 Re:java I/O程式碼疑惑 bluewingsky 337 2013-11-19 16:23
593 Re:java I/O程式碼疑惑 dragonraja 28 2013-11-19 23:09
489 Re:java I/O程式碼疑惑 qrtt1 136 2013-11-24 14:32
» JWorld@TW »  Java 新手區

reply to postflat modego to previous topicgo to next topic
  已讀文章
  新的文章
  被刪除的文章
Jump to the top of page

JWorld@TW 本站商標資訊

Powered by Powerful JuteForum® Version Jute 1.5.8