初學 Java 時,最讓人摸不著頭腦的莫過於 InputStream 和 OutputStream 這兩個基礎類。按名字直覺,InputStream 是「輸入流」,理應有「寫入」方法才對,畢竟數據要「輸入」進來;OutputStream 是「輸出流」,理應有「讀取」方法,因為數據要「輸出」出去。但事實卻相反:前者提供 read(),後者提供 write()。這反直覺的設計曾困擾我許久,每次用到 IO 都得繞很大彎子。
直到研讀《Think in Java》才豁然開朗:InputStream 之所以叫「輸入流」,是因為它把數據源(檔案、網路、記憶體等)封裝成一個流,讓程式能從這個流「讀入」資料;OutputStream 則是把目的地封裝成流,讓程式能向這個流「寫出」資料。簡單說:輸入是把資料輸入到流裡,再從流讀取(所以是 read);輸出是把資料通過流輸出到目的地(所以是 write)。搞清這層「流」的視角,IO 操作瞬間變得順理成章。