2015-10-22 44 views
0

從文件中,「可用」方法的功能是:InputStream中的可用方法是迭代文件的好方法嗎?

返回一個可以從該輸入流中讀取(或 跳過)的字節數的估計值,而不受下一個 阻擋爲這個輸入流調用一個方法。

因此,該方法返回結果需要多長時間。如果我有10000個字的文件,並且我想通過檢查這樣的經歷每個字:

while (steam.available() > 0) { 
    steam.read(); // suppose that this read a word 
} 

所以每個讀數的第一個字之後,該方法要經過的下一個9999分的話嗎?在第二個單詞之後,檢查下一個9998個單詞嗎?

從文件中,它說方法「估計字節數」,那麼它是如何做到的?

回答

2

正如它聲明的那樣,目的是告訴你在沒有讀取呼叫阻塞的情況下可以讀取多少字節。這對於網絡連接非常有用,其中數據填充緩衝區,並且您可能需要處理儘可能多的數據而不讀取呼叫阻塞,以等待更多數據。

這不是很常用,也不會告訴你任何有關GOING可用性的信息。例如,iv看到它用於測試消息的長度,這當然是錯誤的,因爲在那個時候只有一部分消息可能被接收到。

您最好只是閱讀整個流,直到達到EOF。 available()只有在您想要處理儘可能多的數據而沒有阻塞的情況下才能使用。它表示「估計」,因爲更多的數據可能會一直出現,並且您可能已經能夠讀取比您在調用它的確切時刻返回的available()更多的字節。

實際上,您需要流中的所有數據,或者在達到某個值時停止。但是,這是一個獨立的問題,它從它來自哪裏來的速度有多快。它是否阻擋 - 你既不會知道也不在乎。 :)