结合这个图,总结一下对io这方面的心得:
1, 字节流+编码=字符流 这是字节字符流的本质区别,由此也知道两者的应用范围:字符流用在需要编码解码文件比较方面,但是字节流可以用在所以文件的读取和写入,
2,输入流关联文件不同:
文本文件 FileInputstrem 包转类 BufferInputstream
键盘录入 标准输入流 System.in 是底层的,具有唯一性
输入流的read方法介绍
write(int byte);一次写一个字节
write(byte[],int begin,int end)一次写一个字节数组的一部分或者全部,
int read()一次读取一个字节 返回的是读到字符的二进制码所对应的int类型
read(byte[])一次读取一个字节数组 返回的是所读到字符的个数
readline()一次读取一行数据,自动判断换行标记\r\n
系统的换行标记在配置文件中,可以直接获取定义为常量:
private static final Sting LINR_SEPARATOR =System.getProperty(line.separator);
在构造函数参数加上boolean型的true,能实现续写功能
io中追重要的就是转换流
字节转换字符和字符转换字节流
InputStreamRead
OutputStreamWrite
转换流后可以再使用包转类即两个最常用的经典必背代码:
InputStreamRead isr = new InputStreamRead(new BufferedInputStream(System.in));
OutputStreamWrite osw = new OutputStreamWrite(new BufferedOutputStream(System.out));以下代码不动就可以执行各种不同的需求,只需要在关联的流做相应的变化即可
关于使用流的步奏,四个明确
转换流:
InputStreamReader :字节到字符的桥梁。解码。
OutputStreamWriter:字符到字节的桥梁。编码。
流的操作规律:
之所以要弄清楚这个规律,是因为流对象太多,开发时不知道用哪个对象合适。
想要知道开发时用到哪些对象。只要通过四个明确即可。
1,明确源和目的(汇)
源:InputStream Reader
目的:OutputStream Writer
2,明确数据是否是纯文本数据。
源:是纯文本:Reader
否:InputStream
目的:是纯文本 Writer
否:OutputStream
到这里,就可以明确需求中具体要使用哪个体系。
3,明确具体的设备。
源设备:
硬盘:File
键盘:System.in
内存:数组网络:Socket流
v目的设备:
硬盘:File
控制台:System.out
内存:数组
网络:Socket流
4,是否需要其他额外功能。
1,是否需要高效(缓冲区);
是,就加上buffer.
2,转换。
|
|