看板 java 關於我們 聯絡資訊
像這樣子重複包起來的 io stream: Socket s = new Socket(domain, port); InputStream a = s.getInputStream(); InputStreamReader b = new InputStreamReader(a); BufferedReader c = new BufferedReader(b); 是需要全部依序 close c.close(); b.close(); a.close(); s.close(); 還是只需要 c.close(); s.close(); 我以為得依序close,但是書上的範例是後者。 兩種方法執行都不會產生問題,但是自我感覺不太良好。 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 220.133.0.171
slalala:要不要補一段 當c close之後 a與b是否 closed? 10/11 21:01
Yes, they are closed. s.isClosed(); // returns false c.close(); s.isClosed(); // returns true char[] bc = new char[2048]; b.read(bc); // 產生 java.io.IOException: Stream closed byte[] bb = new byte[2048]; a.read(bb); // 產生 nulljava.net.SocketException: socket closed 這種自動 close 上層串流是程式設計師之間的慣例嗎? 如果自動 close 是慣例,為何範例仍加上 s.close(); ? ※ 編輯: kikiapple 來自: 220.133.0.171 (10/11 22:04)
PsMonkey:不是設計師之間的慣例,是 class 設計的想法吧? 10/11 22:06
slalala:以資料庫連線比較好懂 沒close就一個使用者卡在那邊 10/11 22:08
kikiapple:可以理解是要確保串流有關閉,可是書上的例子讓我迷惑了 10/11 22:17
kikiapple:要不就四個都close,卻只close c跟s? 10/11 22:19
svenlee:你可以去看看Socket.close()的原始碼發生了什麼事 10/15 22:29