Java.IO 包中定义了多个流类型 (类和抽象类) 来实现输入\输出功能,
按数据流的方向不同可以分为输入和输出流
按处理数据单位不同可以分为字节流和字符流
按照功能的不同可以分为节点流和处理流
字节流 :完完全全按照二进制编码格式一个字节一个字节来读的。
输入流 InputStream 输出流 OutputStream
字符流是按照一个字符一个字符来读的,一个字符等于两个字节。 会将读取的字节数据根据当前使用的字符进行编译
字符流 = 字节流+解码。
输入流 Reader 输出流 Writer
只考虑文件操作情况下:
读取操作是:input \ read 从硬盘(存储设备) 到 内存
写入操作是:output \ write 从内存 到 硬盘(存储设备)
节点流
节点流就相当于一根管道直接插到数据源上面,直接读数据源里面的数据,或者直接往数据源里面写入数据。
典型的节点流是文件流:文件的字节输入流(FileInputStream) 文件的字节输出流(FileOutputstream)
文件的字符输入流(FileReader),文件的字符输出流(FileWriter)
处理流
处理流是”连接“在已存在的流(节点流或者处理流)之上,通过对数据的处理为程序提供更为强大的读写功能。
InputStream 输入流
继承自InputStream的都是用于向程序中输入数据,且数据的单位为字节(8 bit);
具体方法
//读取一个字节并以整数的形式返回
//如果返回-1 已到输入流的末尾
int read() throws IOException
//读取一系列字节并存储到一个数组buffer
//返回存储了读取的字节的byte数组, 如果返回-1 已到输入流的末尾
int read (byte[] buffer) throws IOException
close 关闭流,释放资源
read方法是一个字节一个字节的读。
read(byte[] buffer)方法是读取是先把数据读取到byte数组buffer里面,然后处理里面的数据。
OutputStream 输出流
继承自OutputStream的都是用于向程序中输出数据,且数据的单位为字节(8 bit);
具体方法
//向输出流中写入一个字节,该字节数据为参数b的低八位
write(int b) throws IOException
//将一个字节类型的数组中的数据写入流
write(byte[]b) throws IOException
//将一个字节型的数组中的从指定位置开始的len个字节写入到输出流
write(byte[]b,int off,int len) throws IOException
//关闭释放内存资源
close(); throws IOException
//将输出流中缓冲的数据全部写出到目标文件
flush() throws IOException
Reader 流
和InputStream 一模一样,唯一的区别在于读取的数据单位不同。继承自Reader的流都是向程序中
输入数据,数据单位都是16bit
一个字符就是两个字节 这种一个字符一个字符读取的方式有它存在的必要性 比如中文在Unicode码中中文占两个
字节 ,如果使用字节流来读一次只能读半个字。使用字符流就可以避免这个问题。
//读取一个字符并以整数形式返回 如果返回-1 已到输入流的末尾
read() 返回int类型 抛IO异常
//读取一些字符并且储存到一个buffer数组中
//返回实际读取的字符数 如果返回-1 已到输入流的末尾
read(char[] rea) 返回int类型 抛IO异常
//关闭流释放资源
close() 无返回值 抛IO异常
//跳过n个字符不读 返回实际跳过的字节数
skip(long n) 返回long类型 抛IO异常
Writer 流
//向输出流中写入一个数据
write(int c); 无返回值 抛IO异常
//将一个字符型的数组写入输出流
write(char[] c); 无返回值 抛IO异常
//将一个字符数组从指定位置开始(offset)的指定长度(length)个字符写入输出流
write(char[] ,intoffset, int length); 无返回值 抛IO异常
//将一个字符串中的字符写入到输出流
write(String string); 无返回值 抛IO异常
//将一个字符串从offset开始的length个字符写入到输出流
write(String string,int offset, int length) 无返回值 抛IO异常
//关闭流释放资源
close();
处理流
1、缓冲流,缓冲流要“套接”在相应的节点流之上,对读写的数据提供了缓冲的功能,提高了读写的效率,同时增加一些方法。
缓冲流是指带有缓冲区的,缓冲区(Buffer)就是内存里面的一小块区域,读写时都把数据放到这块缓冲区域里面,减少io对于硬盘的访问次数。
先把数据放置到缓冲区上,等到缓冲区满了以后,再 一次把缓冲区里面的数据写入硬盘或者读取出来。
剩余内容整理中。。。