public static void copyDate(File srcFile,File destFile){
try{
FileInputStream reader=new FileInputStream(srcFile);
FileOutputStream writer=new FileOutputStream(destFile);
int length=0;
byte[] dataBytes=new byte[4096];//这个数改成128也一样,速度慢了很多
while((length=reader.read(dataBytes))!=-1){
writer.write(dataBytes);
}
reader.close();
writer.close();
因为你写入的字节比实际要多。
问题在这:
byte[] dataBytes=new byte[4096];//这个数改成128也一样,速度慢了很多
在最后一次的读取字节时,原有的字节数组要小于4096,你再考虑一下。
谢谢老师
byte[] buffer = new byte[1024 * 1024]; using (FileStream localFileStream = new FileStream(tmpFile, FileMode.CreateNew)) { int bytesRead= 0; do { bytesRead = fileStream.Read(buffer, 0, buffer.Length); localFileStream.Write(buffer, 0, bytesRead); } while (bytesRead > 0); }
你这么读试试
老师我问的是JAVA
@小张学代码: 不好意思,看错了
byte[] dataBytes=new byte[4096];//这个数改成1试试
在操作系统中内存空间是按块区分的,一个块应该是2K,有的是4K,所以占用空间肯定是块的整数倍,但是实际的使用空间是根据数据大小来计算的,所以你去读的时候是大小byte[4096]。所以是一次读4K,最后一次虽然没4K,但是也拿了4K的东西(虽然后面是空的,),所以实际空间和原来的不一样。