IO,即in和out,也就是输入和输出,指应用程序和外部设备之间的数据传递,常见的外部设备包括文件、管道、网络连接。
在Java 中是通过流处理IO 的,那么什么是流?\n\n流(Stream),是一个抽象的概念,是指一连串的数据(字符或字节),是以先进先出的方式发送信息的通道。
当程序需要读取数据的时候,就会开启一个通向数据源的流,这个数据源可以是文件,内存,或是网络连接。类似的,当程序需要写入数据的时候,就会开启一个通向目的地的流。这时候你就可以想象数据好像在这其中“流”动一样。
一般来说关于流的特性有下面几点:
先进先出:最先写入输出流的数据最先被输入流读取到。
顺序存取:可以一个接一个地往流中写入一串字节,读出时也将按写入顺序读取一串字节,不能随机访问中间的数据。
只读或只写:每个流只能是输入流或输出流的一种,不能同时具备两个功能,输入流只能进行读操作,对输出流只能进行写操作。在一个数据传输通道中,如果既要写入数据,又要读取数据,则要分别提供两个流。
如图结构
综合案例
public static void main(String[] args) throws IOException {
//1.定义源文件和目标文件的File文件
File f1 = new File("D:/a.jpg");
File newFile=new File("D:/aa/newFile.jpg");
//2.定义输入输出流关联文件
InputStream in = new FileInputStream(f1);
OutputStream out = new FileOutputStream(newFile);
//3.使用输出流读取内容,然后把读取的内容写入目标文件中
//一个一个字节进行读取
// int n;
// while ((n=in.read())!=-1){
// out.write(n);
// }
//使用缓冲区读写
// byte[] buffer=new byte[10];
// while (true) {
// int n = in.read(buffer);
// if (n != -1) {
// out.write(buffer,2,n);
// } else {
// break;
// }
// }
long start=System.currentTimeMillis();
//推荐写法
byte[] buffer=new byte[1024];
int n;
while ((n=in.read(buffer))!=-1){
out.write(buffer,0,n);
}
long stop=System.currentTimeMillis();
System.out.println("耗时:"+(stop-start));
}