Java_IO流的操作规律
4446 点击·0 回帖
![]() | ![]() | |
![]() | 流的操作规律:
1,明确源和目的。 数据源:就是需要读取,可以使用两个体系:InputStream、Reader; 数据汇:就是需要写入,可以使用两个体系:OutputStream、Writer; 2,操作的数据是否是纯文本数据? 如果是:数据源:Reader 数据汇:Writer 如果不是:数据源:InputStream 数据汇:OutputStream 3,虽然确定了一个体系,但是该体系中有太多的对象,到底用哪个呢? 明确操作的数据设备。 数据源对应的设备:硬盘(File),内存(数组),键盘(System.in) 网络(Soket) 数据汇对应的设备:硬盘(File),内存(数组),控制台(System.out) 网络(Soket)。 4,需要在基本操作上附加其他功能吗?比如缓冲。 如果需要就进行装饰。 转换流特有功能:转换流可以将字节转成字符,原因在于,将获取到的字节通过查编码表获取到指定对应字符。 转换流的最强功能就是基于 字节流 + 编码表 。没有转换,没有字符流。 发现转换流有一个子类就是操作文件的字符流对象: InputStreamReader |--FileReader OutputStreamWriter |--FileWrier 想要操作文本文件,必须要进行编码转换,而编码转换动作转换流都完成了。所以操作文件的流对象只要继承自转换流就可以读取一个字符了。 但是子类有一个局限性,就是子类中使用的编码是固定的,是本机默认的编码表,对于简体中文版的系统默认码表是GBK。 FileReader fr = new FileReader("a.txt"); InputStreamReader isr = new InputStreamReader(new FileInputStream("a.txt"),"gbk"); 以上两句代码功能一致, 如果仅仅使用平台默认码表,就使用FileReader fr = new FileReader("a.txt"); //因为简化。 如果需要制定码表,必须用转换流。 转换流 = 字节流+编码表。 转换流的子类File = 字节流 + 默认编码表。 凡是操作设备上的文本数据,涉及编码转换,必须使用转换流。 | |
![]() | ![]() |