try-with-resources引起的Socket关闭,产生java.net.SocketException: Socket is closed?
一、try-with-resources是什么?
它是jdk1.7之后出現(xiàn)的一直新的try-catch異常捕獲操作,目的就是簡(jiǎn)化操作,實(shí)現(xiàn)資源的自動(dòng)關(guān)流。
示例代碼
所以用它的時(shí)候要注意了,如果我們的資源還要繼續(xù)使用,就不能用它來(lái)捕獲異常。例如在編寫客戶端-服務(wù)器程序時(shí),用于交互的Socket在交互完之前是不應(yīng)該被釋放的,否則就會(huì)出現(xiàn)java.net.SocketException: Socket is closed異常。
例子:
這是一個(gè)將服務(wù)器發(fā)送過(guò)來(lái)的裝著集合對(duì)象的對(duì)象流反序列化為集合對(duì)象的方法。方法中把從Socket獲得的InputStream包裝在了ObjectInputStream對(duì)象流中,而ObjectInputStream對(duì)象使用了try-with-resources捕獲,try中語(yǔ)句結(jié)束之后會(huì)自動(dòng)關(guān)閉對(duì)象流,從而Socket被關(guān)閉。
- 如果Scoket有相關(guān)聯(lián)的通道,則生成的OutputStream 的所有操作也會(huì)關(guān)聯(lián)該通道。
- 關(guān)閉生成的OutputStream也將關(guān)閉相關(guān)的Socket。(InputStream同樣的道理)
文章轉(zhuǎn)自
總結(jié)
以上是生活随笔為你收集整理的try-with-resources引起的Socket关闭,产生java.net.SocketException: Socket is closed?的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 2020巨量引擎用户旅游全周期行为动机调
- 下一篇: 在线教育用户增长闭环白皮书