當我使用常規套接字時,我可以調用getInputStream()並使用available()來查看有多少字節可用。我切換到SSLSocket,但現在可用()總是返回0出於某種原因。當我讀取時,我仍然可以獲取數據。如何判斷SSLSocket中是否有可用的數據,以便在沒有數據的情況下可以在不阻塞的情況下爲其提供服務?如何判斷Java SSLSocket是否有可用的數據?
注:
- 我不能調用read()上的InputStream或線程將阻塞。我希望在我的實現中不阻塞。
- available()返回0,即使有SSLSocket的InputStream的數據。
[Java中InputStream.available()的作用是什麼?](http://stackoverflow.com/questions/3695372/what-does-inputstream-available-do-in-java)(請查看[第二個答案](http://stackoverflow.com/a/3695378/2398375)) – 2014-10-12 00:41:39
這很有趣。但是,在我的情況下,有數據可用,因此read()不應該被阻止,並且可用不應該返回0. – Aura 2014-10-12 00:48:20
請檢查該答案的第一條評論 - 「*還要注意available()始終返回零爲SSL套接字*「。這將有助於瞭解爲什麼阻塞是您的情況中的問題。請記住,您正在使用阻止IO – 2014-10-12 00:53:25