一、java流总计约40个相关的接口,类
1、按照流向分,可以分为输入流,输出流
2、按照操作单元分,可以分为字节流,字符流
3、按流的角色划分可以分为节点流,处理流
4、InputStream : 所有字节输入流的基类, Reader :所有字符输入流的基类 ; 均为抽象类
OutputStream: 所有字节输出流的基类,Writer: 所有字符输出流的基类
5、字节流,字符流的区别
a、读写单位不同,字节流已字节为单位(8bit),而字符流以字符为单位,根据码表映射字符,一次可以读多个字节
b、处理对象不同,字节流能处理所有类型的数据,如图片,avi等,而字符流只能用来处理字符类型的数据
c、字节流: 一次读入或读出是8位二进制,通过字节的形式一个字节一个字节,或者字节数组的形式,可以操作一切文件。
package IO;
import java.io.*;
public class IOTEST_02 {
public static void main(String[] args) {
//创建源
File file = new File("dest.txt");
//选择流
try{
InputStream in = new FileInputStream(file);
//读取操作
int temp;
while((temp = in.read())!=-1){
System.out.print((char)temp);
}
//释放资源
}catch (FileNotFoundException e){
e.printStackTrace();
}
catch (IOException e) {
e.printStackTrace();
}
}
}
package IO;
import java.io.*;
public class IOTEST {
public static void main(String[] args) {
//创建源
File file = new File("dest.txt");
//选择流
OutputStream outStream = null;
String msg = "IO,TEST";
byte[] datas = msg.getBytes(); //字符串到字节数组的过程(编码的过程)
try {
outStream = new FileOutputStream(file,true); //第二个参数为可追加的意思
outStream.write(datas,0,datas.length);
outStream.flush(); //刷新数据,避免存在于缓存中
} catch (IOException e) {
e.printStackTrace();
}finally {
try {
outStream.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
处理流的功能:
增加缓冲,已提升性能;
B|IO blocking,io 阻塞式io
N|IO non-blocking io 非阻塞式io Channel ,Selector Buffer
A|IO Asynchronous io 异步非阻塞io 异步 IO 是基于事件和回调机制实现的,也就是应用操作之后会直接返回,不会堵塞在那里,当后台处理完成,操作系统会通知相应的线程进行后续的操作。AIO 是异步IO的缩写,虽然 NIO 在网络操作中,提供了非阻塞的方法,但是 NIO 的 IO 行为还是同步的。对于 NIO 来说,我们的业务线程是在 IO 操作准备好时,得到通知,接着就由这个线程自行进行 IO 操作,IO操作本身是同步的。查阅网上相关资料,我发现就目前来说 AIO 的应用还不是很广泛,Netty 之前也尝试使用过 AIO,不过又放弃了。