首页新闻找找看学习计划

老师好,我用这个方法复制数据,复制后的文件总要比原文件大几十字节是为什么?

0
悬赏园豆:100 [已解决问题] 解决于 2016-07-13 10:20

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();

 

小张学代码的主页 小张学代码 | 初学一级 | 园豆:7
提问于:2016-07-13 09:36
< >
分享
最佳答案
0

因为你写入的字节比实际要多。

问题在这:

byte[] dataBytes=new byte[4096];//这个数改成128也一样,速度慢了很多

在最后一次的读取字节时,原有的字节数组要小于4096,你再考虑一下。

收获园豆:100
seayxu | 大侠五级 |园豆:5468 | 2016-07-13 09:44

谢谢老师

小张学代码 | 园豆:7 (初学一级) | 2016-07-13 10:18
其他回答(3)
0
 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);
            }

你这么读试试

MrNice | 园豆:3008 (老鸟四级) | 2016-07-13 09:53

老师我问的是JAVA

支持(0) 反对(0) 小张学代码 | 园豆:7 (初学一级) | 2016-07-13 10:21

@小张学代码: 不好意思,看错了

支持(0) 反对(0) MrNice | 园豆:3008 (老鸟四级) | 2016-07-13 10:46
0

byte[] dataBytes=new byte[4096];//这个数改成1试试

刘宏玺 | 园豆:14004 (专家六级) | 2016-07-13 10:18
0

在操作系统中内存空间是按块区分的,一个块应该是2K,有的是4K,所以占用空间肯定是块的整数倍,但是实际的使用空间是根据数据大小来计算的,所以你去读的时候是大小byte[4096]。所以是一次读4K,最后一次虽然没4K,但是也拿了4K的东西(虽然后面是空的,),所以实际空间和原来的不一样。

雨落~无痕 | 园豆:478 (菜鸟二级) | 2016-07-28 16:51
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册