[英]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.