理解JAVA的IO流
来源:互联网 发布:国美集团美信网络诈骗 编辑:程序博客网 时间:2024/05/19 12:29
File类
在程序中想要操作文件和目录,是通过File类来完成的,File类中提供是一系列的方法(查看API文档),借助File类可以完成新建、删除、重命名文件和目录,但值得注意的是File并不能访问文件中的内容。想要对访问的文件中的内容,就需要利用IO流(输入输出流)。
理解JAVA的IO流
stream 流是java中对不同的输入/输出源(键盘、文件、网络连接等)的抽象表述。简单来说,可以理解为从起源(source)到接收(sink)的有序数据。
流的分类
从流向的角度来分,流分为输入流和输出流。
输入流:只读,不写(只能从中读取数据,不能向其写数据)。
输出流:只写,不读(只能向其写入数据,不能从中读取数据)。从操作数据的单元不同,流分为字节流和字符流。
字节流:操作的数据单元是8位字节。
字符流:操作的数据单元是16位的字符。从流的角色来分,流分为节点流和处理流。
节点流(也称低级流):程序从/向特定的IO设备(如磁盘、网络)读/写数据。- 处理流(也称高级流、包装流):对一个已经存在的流进行连接或封装,程序通过封装后的流来进行数据的读/写。
. 节点流就相当于用一根特定的水管从数据源端伸出(不同的处理流,对应不同的大小的水管),从程序直接连接到实际的数据源,程序和实际的输入/输出节点是直接连接上的,此时通过这特定的水管程序只能访问一个特定的数据源。但处理流则是在程序端加入了一个转接水管,根据数据源端的水管的大小在外面套上一个转接水管(也就是对节点流进行了封装),然后再接到程序,这样使用的优点就是,只要使用相同的处理流(也就是数据源端的水管大小一样),程序就可以采用完全相同的输入/输出代码(一个对应大小固定的转接水管)来访问不同的数据源。(使用处理流来包装节点流其实是一种典型的装饰器设计模式。)
. 使用处理流的思路:使用处理流来包装节点流,程序通过处理流来执行输入/输出功能,让节点流与底层的IO设备、文件交互。
. 识别处理流和节点交:只要流的构造器的参数不是一个物理节点,而是已经存在的流,那么这种流就一定是处理流;而所有节点流都是直接以物理IO节点作为构造器参数的。例如:
- 处理流(也称高级流、包装流):对一个已经存在的流进行连接或封装,程序通过封装后的流来进行数据的读/写。
... //以一个文本,即物理节点作为构造器参数,FileOutputStream 是节点流 FileOutputStream fos = new FileOoutputStream("test.txt"); //以一个流作为构造器参数,PrintStream 是处理流 PrintStream ps = new PrintStream(fos);...
IO流的体系
- Java中的IO流有将近40个类,但所有的IO流都是从四个基类中扩展出来的。
InputStream/Reader: 是所有输入流的基类,前者是字节输入流,后者是字符输入流。
OutputStram/Writer:是所有输出流的基类,前者是字节输出流,后者是字符输出流。 - 选择的规则:内容是文本内容,使用字符流;内容是二进制内容,则使用字节流。
(附:在计算机中,文件可以分为文本文件和二进制文件,所以能用记事本打开关查看到其中的字符内容的文件都是文本文件,反之则是二进制文件。实质上,计算机中所有文件都是二进制文件,文本文件只是二进制文件的特例:当二进制文件里的内容恰好能被正常解析成字符时,二进制文件也就成了文本文件。)
本文参考了李刚《疯狂Java讲义》一书。
阅读全文
0 0
- 理解Java的IO 流
- 理解Java的IO流
- 理解java的IO流
- Java io 流的理解
- 理解JAVA的IO流
- java io的理解
- Java IO的理解
- Java IO 输入输出流的理解 1
- Java的IO结构理解
- IO流的理解
- 理解java.IO中的“流”
- JAVA IO流深入理解
- JAVA IO流简单理解
- Java 从设计者的角度理解Java IO流
- Java的IO流的操作和一些理解
- JAVA文件IO流的理解(一)
- JAVA文件IO流的理解(二)
- JAVA文件IO流的理解(一)
- 人脸检测和识别 源代码 下载-opencv3+python3.6完整实战项目源代码 识别视频《欢乐颂》中人物
- idea中mybatis三剑客之mybatis plugin的破解安装讲解以及
- show()与exec()的区别
- 毕业设计工具和网站总结
- 课后练习8.3证明
- 理解JAVA的IO流
- SVM分类时间序列问题方法
- cocos2d-x下拉列表实现
- BitMap算法的说明以及验证
- 如何取消鼠标默认选中
- 检索单词的个数
- 图灵杯-第四届“图灵杯”NEUQ-ACM 程序设计竞赛-C-来简单地数个数
- Linux网络编程【六】:TCP协议高性能服务器(http)模型之I/O多路转接epoll
- fullpage:全屏翻页,顶部导航,水平导航demo