谈到IO流,我们首先要知道有哪两种流,有的人会说输入流和输出流,那么这么说也不能说是错了,不过这还不是最本质的IO流,两种流分别是字节流和字符流.
字节流:stream流就是字节流,inputstream,outputstream;输入输出流要对应的去记忆.
附上一个最经典的案例,用字节流复制文件.步骤就是创建输入输出流,然后一个字节一个自己的读取,直到返回值为-1了,就说明读完了,用write方法写,最后关闭输入输出流,这是最基本的步骤.
FileInputStream fis = new FileInputStream("双节棍.mp3");//创建输入流对象,关联双节棍.mp3
FileOutputStream fos = new FileOutputStream("copy.mp3");//创建输出流对象,关联copy.mp3
int b;
while((b = fis.read()) != -1) { //在不断的读取每一个字节
fos.write(b); //将每一个字节写出
}
fis.close();//关流释放资源
fos.close();
说到这里,我们还得说一下Buffered,这个意思就是加缓冲区,带上缓冲区,效率就会提高.比如还用上面的这个例子,我们来实现一下
BufferedInputStream bis = new BufferedInputStream(new FileInputStream("双节棍.mp3"));//创建输入流对象,关联双节棍.mp3
<span style="font-size:18px;"></span><pre name="code" class="java">BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream("copy.mp3");//创建输出流对象,关联copy.mp3
int b;
while((b = fis.read()) != -1) { //在不断的读取每一个字节
fos.write(b);//将每一个字节写出
}
fis.close();//关流释放资源
fos.close();
说到高效,不得不提一下用数组拷贝文件了,附上代码简单说明一下
FileInputStream fis = new FileInputStream("双节棍.mp3");
FileOutputStream fos = new FileOutputStream("copy.mp3");
byte[] arr = new byte[1024 * 8];
int len;
while((len = fis.read(arr)) != -1) {//如果忘记加arr,返回的就不是读取的字节个数,而是字节的码表值
fos.write(arr,0,len);
}
fis.close();
fos.close();
看第三行代码byte[] arr = new byte[1024 * 8],这个就是用数组去高效的拷贝文件