[問題] I/O close 的問題
像這樣子重複包起來的 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
推
10/11 21:01, , 1F
10/11 21:01, 1F
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)
推
10/11 22:06, , 2F
10/11 22:06, 2F
推
10/11 22:08, , 3F
10/11 22:08, 3F
→
10/11 22:17, , 4F
10/11 22:17, 4F
→
10/11 22:19, , 5F
10/11 22:19, 5F
推
10/15 22:29, , 6F
10/15 22:29, 6F
討論串 (同標題文章)
以下文章回應了本文:
完整討論串 (本文為第 1 之 2 篇):