IO流学习
------- <a href="http://www.itheima.com" target="blank">android培训</a>、<a href="http://www.itheima.com" target="blank">java培训</a>、期待与您交流! ----------
本人觉得java中流类体系是稍显复杂的,对于初学者来说很不容易搞清楚各个流的作用与用法,好吧接下来好好总结下流类的作用与使用。
java中的流可以按几种方式分
1.按数据流向分
输入流:程序可以从中读取到数据的流。
输出流:程序可以从中写入数据的流。
2.按数据传输单位分
字节流:以字节为单位传输数据的流。
字符流:以字符为单位传输数据的流。
3.按流的功能分
节点流:用于直接操作数据源的流。
过滤流:也叫处理流,是对一个已经存在的流的连接和封装,来提供更为强大、灵活的读写功能。
java.io包中提供了四个流类的抽象基类 其子类的类名由父类名作为后缀,前缀为该子类的功能描述,这四个基类为
字节流 字符流 输入流 InputStream Reader 输出流 OutputStream Writer
1.InputStream
InputStream抽象类是表示字节输入流的所有类的超类,它一字节为单位从数据源中读取数据。InputStream的常用方法:
public abstract int read() throws IOException:从输入流中读取数据的下一个字节,返回读到的字节值。若遇到流的末尾,返回-1。
public int read(byte[] b) throws IOException:从输入流中读取b.length()个字节的数据并存储到缓冲区数组b中,返回的是实际读到的字节数。
public int read(byte[] b,int off,int len) throws IOException:读取len个字节的数据,并从数组b的off位置开始写入到这个数组中。
public void close() throws IOException:关闭此流并释放与此流关联的所有系统资源。
public int available() throws IOExcetption:返回此输入流下一个方法调用可以不受阻塞从此输入流读取的估计字节数。
InputStream的两个常用子类:FileInputStream和BufferedInputStream
FileInputStream
从文件系统中的某个文件中获得输入字节。哪些文件可用取决于主机环境。
FileInputStream
用于读取诸如图像数据之类的原始字节流。BufferedInputStream:缓冲字符输入流 ,构造方法
BufferedInputStream(InputStream in)
创建一个BufferedInputStream
并保存其参数,即输入流in
,以便将来使用。
BufferedInputStream(InputStream in, int size)
创建具有指定缓冲区大小的BufferedInputStream
并保存其参数,即输入流in
,以便将来使用。
BufferedInputStream一定要接收一个InputStream对象 BufferedInputStream是对InputStream的包装
2.OutputStream
OutputStream抽象类是表示字节输出流的所有类的超类,它以字节为单位向目标地址写入数据:
常用方法介绍:
public abstract void write(int b) throws IOException:将指定的字节写入此输入流。
pubic void write(byte[] b) throws IOException:将b.length()个字节从指定的byte数组写入此输出流。
public void write(byte[] b,int off,int len) throws IOException:将指定byte数组从偏移量off开始的len个字节写入此输出流。
public void flush() throws IOException:刷新此输出流,并强制写出所有缓冲的输出字节。
public void close() throws IOException:关闭此输出流,并释放与此输出流有关的所有系统资源。
OutputStream的常用子类:FileOutputStream和BufferedOutputStream
3.Reader
Reader抽象类是表示字符输入流的所有类的超类,它以字符为单位从数据源中读取数据。
Reader类常用方法:
public int read() throws IOException:读取单个字符,返回座位整数读取的字符,如果已到达流的末尾返回-1;
public int read(char[] buf) throws IOException:
将字符读入数组,返回读取的字符。public abstract int read(char[] buf,int off,int len) throws IOException:读取len个字符数据,并从数组buf的off位置开始下乳到数组中。
public abstract void close() throws IOException:关闭释放资源。
Reader类的常用子类:BufferedReader、InputStreamReader、FileReader
4.Writer
Writer抽象类是表示字符输入流的所有类的超类,它以字符为单位向数据源写出数据。
常用方法介绍:
public void write(int c) throws IOException:写入单个字符。
public int write(char[] buf) throws IOException:写入字符数组。
public abstract void write(char[] buf,int off,int len) throws IOException:写入字符数组的某一部分。
public void write(String str) throws IOException:写入字符串。
public void write(String str,int off,int len) throws IOException:写入字符串的某一部分。
public abstract void close() throws IOException:关闭此流,但要先刷新它。
public abstract void flush() throws IOException:刷新流。
常用子类OutputStreamWriter、FileWirter