什麼時候是InputStream.available()
或BufferedInputStream.available()
在Java的socket編程中有用?什麼時候InputStream.available()有用?
回答
我的看法是,除非你知道「估計」有多好,否則這種方法是無用的。在連接到插座的情況下,估計在任何情況下都不可靠。
問題是該方法的返回值並沒有區分套接字上到達流結束的情況,也沒有在套接字上可用的字符當前,但可能會傳遞更多字符。根據javadoc,兩者都可以歸零。
這種不確定性使得該方法幾乎沒用。
在插座的情況下(以及類似的),該
available()
方法並沒有真正告訴你是否讀取或沒有,如果結果是零。而如果你做出了錯誤的選擇,你會在你不想要的時候阻止,或者從未發現套接字已經關閉。其中任何一個都可能是壞的。在其他情況下(如從本地文件讀取),也有發現讀取是否有可能阻止其他方式。此外,閱讀不太可能阻止很長時間,所以在避免阻止方面通常沒有多大意義。
最後,在某些情況下,我認爲你可以得到一個非零響應,並具有讀取調用塊呢。 (我想在遠程安裝的文件系統的文件...和遠程服務器凍結的可能性,當你嘗試讀取。)
的底線是available()
記錄爲返回一個估計。 javadoc並不保證在所有可能的情況下估算的可靠程度如何,實際上在某些情況下估算不準確,因爲這需要了解遠程服務器將要做什麼。
」單個讀取或跳過這麼多字節不會被阻塞,但可能會讀取或跳過更少的字節。「 < - 這是我以前用過的東西。那麼,沒用?不爲。 (雖然一些執行者*只*返回0所以..) – 2012-08-22 23:37:38
@pst:我想你的觀點是你不能真正依賴任何給定的實現給你回有用的東西。在你的程序中,它將如何處理始終返回0的InputStream?你永遠不會讀它嗎? –
@MarkPeters我會知道我正在處理的實現。儘可能多的樂趣,因爲它很好,相信一個接口或抽象類可以捕獲所有不同的來源/體系結構中的所有東西..老實說,雖然對於「套接字」,我會使用NIO(或更好,它的包裝)。 – 2012-08-22 23:39:56
- 1. 爲什麼InputStream.available()這麼耗時?
- 2. 什麼時候File.join有用?
- 3. 什麼時候__proto__有用?
- 4. QTreeWidget :: currentItem什麼時候沒有選擇什麼時候返回?
- 5. 什麼時候應該使用async/await,什麼時候不用?
- 6. 什麼時候使用__proto__和什麼時候使用原型
- 7. 什麼時候應該使用AWS,什麼時候不使用
- 8. intn_t什麼時候使用它,什麼時候不使用
- 9. 什麼時候使用Ruby和什麼時候使用PHP
- 10. 什麼時候使用ByteString,什麼時候不使用?
- 11. 什麼時候創建了app.config,什麼時候app.exe.config和有什麼區別
- 12. SQL Server CASE什麼時候不使用CASE什麼時候
- 13. ZF2什麼時候使用getServiceLocator()什麼時候不到
- 14. 什麼時候使用GWT,什麼時候不需要
- 15. 什麼時候編譯和構建,什麼時候不用.NET?
- 16. 什麼時候HTTP 404有用,什麼時候應該考慮503?
- 17. dynamic_cast <void*>什麼時候有用?
- 18. 變量變量:什麼時候有用?
- 19. 守護線程什麼時候有用?
- 20. 什麼時候ASP.NET Expression Builders最有用?
- 21. 匿名類型,什麼時候有用?
- 22. 什麼時候是SqlConnection.RetrieveStatistics()有用?
- 23. 什麼時候循環有用?
- 24. 什麼時候使用sIFR?
- 25. 什麼時候調用exit_mmap?
- 26. 什麼時候使用MessageDigest.reset()
- 27. 什麼時候使用VK_IMAGE_LAYOUT_GENERAL
- 28. 什麼時候調用robot.cleanUp()
- 29. 什麼時候使用SVDRecommender
- 30. JOINS什麼時候使用?
如果在沒有可用輸入時調用阻塞的'read'方法會發生什麼? 「available」的文檔說什麼? -1,因爲沒有顯示任何先前的研究,也沒有給出任何上下文(例如,包括來自文檔或經驗的某些內容或者*當前問題*以進一步優化問題)。另請注意,InputStream是* abstract *。 – 2012-08-22 23:22:14
返回可從此輸入流讀取(或跳過)的字節數的估計值,而不會因爲此輸入流的下一次方法調用而被阻止。下一次調用可能是同一個線程或另一個線程。 http://docs.oracle.com/javase/6/docs/api/java/io/InputStream.html#available() – kosa
您從文檔中無法獲得的任何特定措詞? – kosa