2016-11-21 30 views
-2

我正在嘗試編寫一個非阻塞客戶端/服務器,我注意到Socket提供了getInputStream()getOutputStream(),但SocketChannel提供了read()write()爲什麼Socket使用流,但NIO SocketChannel使用讀/寫?

下面的問題都是相關的,是爲了更好地瞭解情況:

  • 爲什麼這些對象如何提供分組數據有什麼不同?
  • 這是否是阻塞vs非阻塞的副作用還是簡單的 的實施?
  • 這是我在決定如何從套接字讀取時需要考慮的事情嗎?
  • 我可以收到一個不完整的數據包,其緩衝區在任一實施中的結束時間早於預期嗎?
+0

有沒有這樣的事情'NIO套接字'。 – EJP

回答

1

爲什麼這些對象在提供分組數據的方式上有所不同?

因爲否則它們將是相同的。 NIO的設計者認爲他們必須將數據,位置,容量和限制封裝到一個類中。

這是阻塞VS非阻塞的副作用還是簡單的不同實現?

不,是的。

這是我在決定如何從套接字讀取時需要考慮的事情嗎?

當然。

我可以收到一個不完整的數據包,其中緩衝區結束時間比預期的要早嗎?

是的。這是TCP/IP的屬性,而不是Java的屬性。