InputStream 和 OutStream 小练习,记录一下
package InputOutput;
import java.io.*;
/**
* inputoutput 学习
* 文件的读取,位置变化,从磁盘中读到内厝,inputSream,
* 从内存中读到磁盘,outputStream
* 字节流:inputStream outputSream
* 字符流:reader 、writer
*
*/
public class Stream {
public static void main(String[] args) throws IOException {
InputStream is = null;
OutputStream os= null ;
Long begin = System.currentTimeMillis();
try {
is = new FileInputStream("D:\\Study\\Wildlife.wmv");
File newFile = new File("D:\\Study\\Wildlife002.wmv");
os = new FileOutputStream(newFile);
// 如果操作的文件太大(单位M(兆)以上),花费时间太长,则需要增大缓冲区
byte [] buffer = new byte[1024];
//判断文件是否存在
if(!newFile.exists()){
// 获取到父类File对象,创建所有不存在的文件夹
newFile.getParentFile().mkdirs();
}
int length = 0 ;
while((length = is.read(buffer)) != -1){
os.write(buffer);
// 1、该方法会强制将缓冲区中的数据一次性写出,不管缓冲区是否已经装满。
// 2、频繁调用flush方法会提高写出次数从而降低写出效率,但是会保证写出的及时性
os.flush();
}
} catch (FileNotFoundException e) {
e.printStackTrace();
}finally {
if(is !=null){
is.close();
}
if(os != null){
//1、缓冲流会首先调用flush将剩余在缓冲区中的数据先写出
//2、然后再将缓冲流处理的流(高级流或者是低级流)关闭后,才将自己关闭。
os.close();
}
}
Long end = System.currentTimeMillis();
System.out.println("times="+(end-begin));
}
}