簡體   English   中英

Java中的阻塞套接字寫入和非阻塞套接字寫入有什么區別?

[英]What is the difference between a blocking socket write and a non-blocking socket write in Java?

非阻塞讀取和阻塞讀取之間的區別是顯而易見的,但我對寫入感到困惑。 我知道非阻塞寫永遠不會阻塞(呃!)。 如果底層套接字緩沖區已滿,則不會向其寫入字節。 這就是為什么在調用channel.write時檢查寫入了多少字節很重要的原因。

現在阻止寫入怎么樣? 什么時候阻止? 當你打電話給同花? 當你在OutputStream上調用write時? 它是否會阻塞,直到底層寫入套接字緩沖區中有空間? 或者,如果它不能寫,它會拋出異常嗎?

是的,它會阻塞,直到底層OS插槽發送緩沖區中有足夠的空間來復制你的字節。當你將數據放入與套接字關聯的Java OutputStream時,或者當你調用flush() ,可能會發生這種情況,無論哪個調用實際write(2)系統調用。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM