是available()
是否可靠用於Java編程的socket編程?是BufferedInputStream.available()在Socket編程中可靠嗎?
我只在乎它告訴我什麼時候有字節可供閱讀,以便在我調用讀取方法時不會阻止它們。
BufferedInputStream.available()
依賴於InputStream.available()
。
爲InputStream.available()的文檔這樣說:
注意的是,雖然InputStream的一些實現將流中返回的字節 總數,許多人不會。從來沒有 正確使用此方法的返回值來分配旨在保存此流中的所有數據的緩衝區 。 http://docs.oracle.com/javase/6/docs/api/java/io/InputStream.html#available()
我不在乎,如果它給正確的字節數與否,只是它不給我0時,有可用於讀取字節。我想知道如果BufferedInputStream.available()總是適用於Windows和Linux。
此外,我不確定「實現」文檔意味着什麼。這是指什麼?到InputStream的子類?到不同的操作系統上的Java?到不同的JVM?
有沒有人在Windows或Linux或其他系統上使用過(),它沒有工作?
切勿使用'available'。永遠。如果你希望''read''有字節'時可以通知,請看[非阻塞IO](http://www.developer.com/java/article.php/3837316/Non-阻斷-IO-定製的可能,在-Java.htm)。 – Jeffrey
從不使用可用的原因是什麼?如果我們不應該使用它,爲什麼它存在? – mudge
如果你確定你知道'available'如何使用你的'InputStream',那麼你可以使用它。然而,InputStream的大多數用法歸結爲FileInputStream或Socket.getInputStream(),它們都不能保證返回正確的可用值。 – Jeffrey