编码时经常使用到流,但是流对象太多了, 如果不弄清楚流操作的规律就不知道用哪个对象合适.
如何选择合适的流对象?只要明确这四个步骤即可:
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将字符转换成字节,用于编码.