---------------------- ASP.Net+Android+IO开发S、.Net培训、期待与您交流! ---------------------
流的概念:
当程序需要读取数据的时候,就会开启一个通向数据源的读取流,数据源可以是文件、内存、控制台、网络等,当程序要写入数据是,就会开启一个通向目的地的输出流,流对象就是干这么些事的。
流的分类:
按数据方向分为:输入流:InputStream、Reader
输出流:OutputStream、Writer
按数据类型分:字节流:InputStream、OutputStream
字符流:Reader、Writer
常用的字节流:
常用字符流
字节流和字符流的区别:
- 字节流读取数据的时候,读到一个字节就返回一个字节。字符流则是使用字节流来读到一个或者多个字节(根据选定的或者默认的编码集来确定读多少个)时,先去查编码表,然后将查到的字符返回。
- 字节流可以处理所有数据类型,字符流只能处理字符数据,如文本。
- 可以根据流的类名后缀来清楚的知道一个流属于哪一类,一些特殊的比如RandomAccessFile、Console除外。字节读取流都以InputStream结尾,字节输出流都以OutputStream结尾,同理字符流的读取流都以Reader结尾,输出流都以Writer结尾。
在操作数据时,用的最多的是字节流,因为所有的数据都是用字节的形式存储的,只有数据是纯文本形式的,才考虑用字符流。
常用流的常用方法
字节输入流:InputStream----所有字节输入流的父类,三个基本的read()方法:
- int read() 从流里边读取一个字节,读到数据末尾则返回一,这个一般已经封装于子类读取流的读取方法中,开发人员很少用到。
- int read(byte[] buf) 从流里边读取数据到buf字节数组中,并返回读取的字节个数,如果读取到末尾,则返回-1,
- int read(byte[] buf, int off, int len)从流里边读取数据到字节数组中,并返回读取的字节个数,字节数组的有效存储位置为角标为off到len-1的位置。这个方法貌似可以用来加密数据。
其他方法
- void close()关闭输入流,释放所有与该流关联的系统资源
- int available() 返回此输入流下一个方法调用可以不受阻塞地从此输入流读取(或跳过)的估计字节数。
- long skip(long n) 跳过和丢弃此输入流中数据的
n
个字节。返回跳过的实际字节数。 - boolean makSupported() 测试此输入流是否支持
mark
和reset
方法。 - void mark(int n) 标记当前位置,n表示之后n个字节数可以被重新读取,如果读取超过了n个字节还没有调用reset方法,标记失效
- void reset 将输入流重新定义到最后调用mark方法的位置,但是如果没有标记或者标记失效,则抛出异常。
字节输出流:OutputStream---所有字节输出流的父类,三个基本的write方法
- void write(int n) 将制定的字节写入输出流
- void write(byte[] buf) 将字节数组中的所有字节写入指定输出流
- void write(byte[] buf,int off, int len) 将指定字节数组的从角标off到角标len-1的字节写入输出流
其他方法:
- void close()
- void flush() 输出流特有,因为数据写在缓冲区里,所以在程序中要记得刷新一下,虽然很多输出流子类提供了自动刷新的功能,但是如果忽略了fulsh()方法有时候还是会造成一点小麻烦的。
---------------------- ASP.Net+Android+IOS开发、.Net培训、期待与您交流! ----------------------
详细请查看:http://edu.csdn.net