JAVA 输入输出流详解
2015-12-02 09:48
441 查看
首先,计算机中所有的文件都是以字节的形式进行传输的。
InputStream是字节输入流的所有类的超类,OutputStream是字节输出流的所有类的超类,Reader是
所有读取字符串输入流的祖先,Writer是所有输出字符串流的祖先。因为JAVA中输入输出都是相对的,
所以我们详解JAVA中的输入流,理解了输入流的相关知识,输出流自然就了解了。
InputStream有很多子类,其中最常用的就是FIleInputStream,FIleInputStream是一个字节流读取函数,但是它只能一个字节一个字节的读取文本,并且读出的是Ascii整数,不能按行或者其他方式读取。
Reader也有很多子类,常用的有BufferedReader,InputStreamReader和FileReader。
1.BufferedReader是一个高速缓存字符输出流,它以字节的方式从文件中读取文本,缓冲各个字符从而实现字符数组和行的高速读取。但BufferedReader 不能直接读取文本,它读取的文本必须经过字节流的缓冲,也就是说BufferedReader只能通过包装其他字符输出流才能实现文件的字符输出。BufferedReader也是唯一的可以按行读取文件的输出流,也是最常用的。
2.InputStreamReader是字节流转化为字符流的桥梁,如下所示,InputStreamReader需要经过字节流的包装才能实现文件的读取,读取得到的也是Ascii整数,不能按行或者其他方式读取。。
也就是说所有这些文本读取函数中只有BufferedReader返回的是String类型的文本,也只有BufferedReader可以实现按行读取,所以在真正使用过程中,一般情况下我们都使用BufferedReader包装其他输出流来进行文本的读取。
InputStream是字节输入流的所有类的超类,OutputStream是字节输出流的所有类的超类,Reader是
所有读取字符串输入流的祖先,Writer是所有输出字符串流的祖先。因为JAVA中输入输出都是相对的,
所以我们详解JAVA中的输入流,理解了输入流的相关知识,输出流自然就了解了。
InputStream有很多子类,其中最常用的就是FIleInputStream,FIleInputStream是一个字节流读取函数,但是它只能一个字节一个字节的读取文本,并且读出的是Ascii整数,不能按行或者其他方式读取。
Reader也有很多子类,常用的有BufferedReader,InputStreamReader和FileReader。
1.BufferedReader是一个高速缓存字符输出流,它以字节的方式从文件中读取文本,缓冲各个字符从而实现字符数组和行的高速读取。但BufferedReader 不能直接读取文本,它读取的文本必须经过字节流的缓冲,也就是说BufferedReader只能通过包装其他字符输出流才能实现文件的字符输出。BufferedReader也是唯一的可以按行读取文件的输出流,也是最常用的。
FileInputStream file2 = new FileInputStream(file); InputStreamReader file1 = new InputStreamReader(file2); BufferedReader reader = new BufferedReader(file1);
或者是这样 FileReader file; BufferedReader reader; String line; try { file = new FileReader("E:\\ff.txt"); reader = new BufferedReader(file); line = reader.readLine(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); }
2.InputStreamReader是字节流转化为字符流的桥梁,如下所示,InputStreamReader需要经过字节流的包装才能实现文件的读取,读取得到的也是Ascii整数,不能按行或者其他方式读取。。
FileInputStream file2 = new FileInputStream(file); InputStreamReader file1 = new InputStreamReader(file2);3.FileReader是Reader类中唯一一个不需要字符流包装就能实现文件读取的子类,因为FileReader源码中包装了一个FileInputStream函数,所以上面两个子类也可以通过包装FileReader来实现文本读取,但FileReader本身返回的是Ascii整数,不能按行或者其他方式读取。
也就是说所有这些文本读取函数中只有BufferedReader返回的是String类型的文本,也只有BufferedReader可以实现按行读取,所以在真正使用过程中,一般情况下我们都使用BufferedReader包装其他输出流来进行文本的读取。
相关文章推荐
- JavaEE_Mybatis_SpringMVC_Spring_lesson2_(多种)非注解处理器映射器与适配器
- JAVA学习摘记
- Java基础中的基础01
- Java Calendar 类时间操作,代码很简单。 演示了获取时间,日期时间的累加和累减,以及比较。
- Day2_数据类型与运算符
- java中synchronized用法基本总结
- JDK5新特性总结
- 集算器用作Java计算类库的应用结构
- java List的使用
- JavaMelody应用监控使用指南
- 继承
- 解决Java线程池任务执行完毕后线程回收问题
- spring声明式事物控制的注意事项
- java 多线程例题
- struts2接受中文乱码
- Java开发信仰者
- java中转发和重定向的区别
- java中的class 与Class , A.class 与 A.getClass() 到底有什么 不同
- Java学习之多态
- Spring AOP 实现原理与 CGLIB 应用