有关流Stream
2015-09-22 09:56
162 查看
什么是流?
流,Stream,英文中溪流的意思。
java.io.File类,File类封装的只是文件名,不是真实的文件。要访问这些文件,就需要用到流。
也就是说,要访问真正的文件,是通过流的方式来读的。
这里将流想象成水管,水管的两端,一端是文件,另一端是程序,程序可以连接多个文件。
流有很多种类型,可以理解为有很多种类型的水管。通过网路的连接的, 两种不同的水管拼在一起;水管一层套一层的,叫做处理流。。。。
流的分类?
输入流和输出流?
输入和输出是站在程序的角度来说的。
想象一下,程序是一个大的储水桶。各个文件是不同的小桶。
如果程序读数据,需要从别的水桶输入水,这叫做输入!
如果程序写数据,需要向别的水桶注入水,这里注意水桶可以是新建的空水桶,或者只有半桶水什么的,这叫做输出,从程序向外输出的。
字节流和字符流?
首先,计算机内的语言,我们都知道是010101010,但是我们读文件的时候并不会一位一位读。而是一个字节一个字节读,或者一个字符一个字符读。
字节,一个字节是8位。字符,一个字符是两个字节。
为什么有了字节还需要用到字符呢?因为在计算机中,我们知道中文的汉字都是两个字节的,一个字就是一个字符,如果一个字节一个字节来读,一次只能读半个字,是不完整的。所以需要用到字符。
节点流和处理流?
节点流,就是流的两端都是直接连在文件和程序上的。
处理流,就是流的两端不是直接连在文件和程序上的。而是一层套一层,想象一下,水管一层套一层,也就是对水管内的水作了一定的处理,比如加热,降温什么的。
这就是处理流。
InputStream?
顾名思义,就是向程序中输入数据。接下来讲几个基本方法:
int read() throws IOException //读数据,然后返回字节数,字节数是整型的
int read(byte[] buffer) throws IOException// 这里比较有意思。返回的是字节的数组,为什么可以一个一个返回还要这样建一个数组返回呢?
可以理解为水桶,我们蓄满一小桶水的时候再传,不用一口水一口水这样频繁的传了。我们说P2P软件为什么毁硬盘呢,是因为读写硬盘的次数太过频繁了,硬盘负荷比较大,就是因为,每次读写数据的单位太小,1G的东西,读的时候一个KB一个KB读,过于频繁了。
int read(byte[] buffer,int offset,int length) throws IOException
。。。剩下的方法因为暂时没用到所以不赘述。
void close() throws IOException //关闭流释放内存资源
OutputStream?
介绍基本方法:
void write(int b) throws IOException //写入一个字节的数据
void write(byte[] b) throws IOException //写入一个数组的字节类型数据
void write(byte[] b,int off,int len) throws IOException
void close() throws IOException //关闭流释放内存资源
void flush() throws IOException // flush 冲刷(冲厕所的时候用这个单词,醉了2333333)这句的意思是就是清空,将输出流中缓冲的数据全部写到目的地。
需要在调用close()之前调用。为什么需要这个方法呢?因为close()方法是简单粗暴的关闭了水管,直接切断连接。就算水管中还有一些
水没传过去也是。所以用flush方法,将水管中残存的水先冲到目的地,再调用close()比较科学。
所以良好的编程方式,先写flush()再写close()
Reader?
Reader就是读数据,对程序来说就是输入,InputStream。从分类图可以看出来,区别就是一个字节一个字节读还是一个字符一个字符读。
Writer?
也是一样的道理。
流,Stream,英文中溪流的意思。
java.io.File类,File类封装的只是文件名,不是真实的文件。要访问这些文件,就需要用到流。
也就是说,要访问真正的文件,是通过流的方式来读的。
这里将流想象成水管,水管的两端,一端是文件,另一端是程序,程序可以连接多个文件。
流有很多种类型,可以理解为有很多种类型的水管。通过网路的连接的, 两种不同的水管拼在一起;水管一层套一层的,叫做处理流。。。。
流的分类?
字节流 | 字符流 | |
输入流 | InputStream | Reader |
输出流 | OutputStream | Writer |
输入和输出是站在程序的角度来说的。
想象一下,程序是一个大的储水桶。各个文件是不同的小桶。
如果程序读数据,需要从别的水桶输入水,这叫做输入!
如果程序写数据,需要向别的水桶注入水,这里注意水桶可以是新建的空水桶,或者只有半桶水什么的,这叫做输出,从程序向外输出的。
字节流和字符流?
首先,计算机内的语言,我们都知道是010101010,但是我们读文件的时候并不会一位一位读。而是一个字节一个字节读,或者一个字符一个字符读。
字节,一个字节是8位。字符,一个字符是两个字节。
为什么有了字节还需要用到字符呢?因为在计算机中,我们知道中文的汉字都是两个字节的,一个字就是一个字符,如果一个字节一个字节来读,一次只能读半个字,是不完整的。所以需要用到字符。
节点流和处理流?
节点流,就是流的两端都是直接连在文件和程序上的。
处理流,就是流的两端不是直接连在文件和程序上的。而是一层套一层,想象一下,水管一层套一层,也就是对水管内的水作了一定的处理,比如加热,降温什么的。
这就是处理流。
InputStream?
顾名思义,就是向程序中输入数据。接下来讲几个基本方法:
int read() throws IOException //读数据,然后返回字节数,字节数是整型的
int read(byte[] buffer) throws IOException// 这里比较有意思。返回的是字节的数组,为什么可以一个一个返回还要这样建一个数组返回呢?
可以理解为水桶,我们蓄满一小桶水的时候再传,不用一口水一口水这样频繁的传了。我们说P2P软件为什么毁硬盘呢,是因为读写硬盘的次数太过频繁了,硬盘负荷比较大,就是因为,每次读写数据的单位太小,1G的东西,读的时候一个KB一个KB读,过于频繁了。
int read(byte[] buffer,int offset,int length) throws IOException
。。。剩下的方法因为暂时没用到所以不赘述。
void close() throws IOException //关闭流释放内存资源
OutputStream?
介绍基本方法:
void write(int b) throws IOException //写入一个字节的数据
void write(byte[] b) throws IOException //写入一个数组的字节类型数据
void write(byte[] b,int off,int len) throws IOException
void close() throws IOException //关闭流释放内存资源
void flush() throws IOException // flush 冲刷(冲厕所的时候用这个单词,醉了2333333)这句的意思是就是清空,将输出流中缓冲的数据全部写到目的地。
需要在调用close()之前调用。为什么需要这个方法呢?因为close()方法是简单粗暴的关闭了水管,直接切断连接。就算水管中还有一些
水没传过去也是。所以用flush方法,将水管中残存的水先冲到目的地,再调用close()比较科学。
所以良好的编程方式,先写flush()再写close()
Reader?
Reader就是读数据,对程序来说就是输入,InputStream。从分类图可以看出来,区别就是一个字节一个字节读还是一个字符一个字符读。
Writer?
也是一样的道理。
相关文章推荐
- 校园讲座小记
- Spinner类setSelection执行流程源码解析
- 媒体变现四种方式
- 【转】10分钟搭建 App 主流框架
- 学习小记
- /dev/mapper/VolGroup-lv_root: unexpected inconsistency; run fsck manually
- 关于Latch
- Linux Shell 文本处理工具集锦
- 顶场先?底场先?
- 理解矩阵乘法
- php+mysql新无线级分类
- 很赞的源码平台
- mysql多实例
- XE8-indy10中CheckForGracefulDisconnect函数源码
- Aspose.Cell 导出和导入Excel
- SVN:冲突解决 合并别人的修改
- QQ协议分析及还原 http://blog.csdn.net/qinggebuyao/article/details/7814499
- WebRTC知识分享——WebRTC on Android
- Piwik网站分析软件学习
- MongoDB 高级用法