編碼時經常使用到流,但是流對象太多了, 如果不弄清楚流操作的規律就不知道用哪個對象合適.
如何選擇合適的流對象?只要明確這四個步驟即可:
1. 確定源(InputStream/Reader)和目的(OutputStream/Writer)
2. 是否是純文本(是: Reader和Writer)
3. 明確具體的設備: 鍵盤(System.in or System.out), 硬盤(File), 內存(數組), 網絡(Socket)
4. 是否需要額外功能?( 需要轉換(字節<-->字符) :InputSteamReader/OutputStreamwriter; 需要高效:BufferedXxx)
具體分析:
1. 明確源和目的
源 : InputStream / Reader
目的: OutputStream / Writer
2: 明確數據是否是純文本數據(明確具體要使用哪個體系)
源: 是純文本, 使用Reader
不是純文本: 使用InputStream
目的: 是純文本 ,使用Writer
不是純文本: 使用OutputStream
3: 明確具體的設備
源設備:
硬盤:File
鍵盤:System.in
內存:數組
網絡:Socket流
目的設備:
硬盤:File
控制檯:System.out
內存:數組
網絡:Socket流
4: 是否需要其他額外功能?
是否需要緩衝區(提高效率): 是,則加上Buffered;
是否需要在字節和字符間轉換: 是,則使用轉換流(InputStreamReader / OutputStreamWriter)
是否需要指定編碼: 是,則使用轉換流(InputStreamReader / OutputStreamWriter)
PS:
InputStreamReader將字節轉換成字符,用於解碼; OutputStreamWriter將字符轉換成字節,用於編碼.