运行结果(效率):
(3)批量字节进行文件的拷贝,不带缓冲的字节流(就是上面第三点最初的案例的代码)
* 字节批量拷贝文件,不带缓冲 copyFile(File srcFile,File destFile)throws IOException{ 5 if(!srcFile.exists()){ IllegalArgumentException("文件:"+srcFile+"不存在"); 7 } 8 if(!srcFile.isFile()){ IllegalArgumentException(srcFile+"不是一个文件"); 10 } 11 FileInputStream in =new FileInputStream(srcFile); 12 FileOutputStream out =new FileOutputStream(destFile); [] buf=new byte[8*1024]; 15 int b; 16 while((b=in.read(buf, 0, buf.length))!=-1){ 17 out.write(buf, 0, b); } 20 in.close(); 21 out.close(); 22 }
View Code运行结果(效率):
(4)批量字节进行文件的拷贝,带缓冲的字节流(效率最高,推荐使用!!)* 多字节进行文件的拷贝,利用带缓冲的字节流 copyFileByBuffers(File srcFile,File destFile)throws IOException{ 5 if(!srcFile.exists()){ IllegalArgumentException("文件:"+srcFile+"不存在"); 7 } 8 if(!srcFile.isFile()){ IllegalArgumentException(srcFile+"不是一个文件"); 10 } 11 BufferedInputStream bis=new BufferedInputStream(new FileInputStream(srcFile)); 12 BufferedOutputStream bos=new BufferedOutputStream(new FileOutputStream(destFile)); [20*1024]; 14 int c; 15 while((c=bis.read(buf, 0, buf.length))!=-1){ 16 bos.write(buf, 0, c); } 19 bis.close(); 20 bos.close(); 21 }
运行结果(效率):
注意:
批量读取或写入字节,带字节缓冲流的效率最高,推荐使用此方法。
当使用字节缓冲流时,写入操作完毕后必须刷新缓冲区,flush()。
首先我们需要了解以下概念。
1)需要了解编码问题---->转移至《计算机中的编码问题》
2)认识文本和文本文件
java的文本(char)是16位无符号整数,是字符的unicode编码(双字节编码)
文件是byte byte byte...的数据序列
文本文件是文本(char)序列按照某种编码方案(utf-8,utf-16be,gbk)序列化byte的存储
3)字符流(Reader Writer)
字符的处理,一次处理一个字符;
字符的底层依然是基本的字节序列;
4)字符流的基本实现
InputStreamReader:完成byte流解析成char流,按照编码解析。
OutputStreamWriter:提供char流到byte流,按照编码处理。
-------------------------Reader和Writer的基本使用-------------------------------