关于文件拆分的问题。

m0_37645396 2018-07-20 02:59:02
今天写了一个关于文件拆分的测试。有个地方不知道错在哪,有大神能指点一下吗?

public class TestCut {

public void cut() {

String readPath = "d:/testcut/vmware.log";
File testFile = new File(readPath);

long num = testFile.length() / 10L;

try {

RandomAccessFile file1 = new RandomAccessFile(testFile, "r");

byte[] min = new byte[1024];
int len = -1;

for(int i = 0; i < 10; i++ ) {

String writePath = "d:/testcut/vmware" + i + ".log";
File testOut = new File(writePath);
RandomAccessFile file2 = new RandomAccessFile(testOut,"rw");

try {
while((len = file1.read(min)) != -1) {
System.out.println(len);//最后一次len值是278
file2.write(min,0,1024);
//file2.write(min,0,len);
if(file2.length() > num) {
break;
}
}
} catch (IOException e) {
e.printStackTrace();
}
}
} catch (FileNotFoundException e) {
e.printStackTrace();
}
}
}


上面注释的程序就是像请教一下,为什么两者得出的最后一个文件的内容不一样。

public void write(byte[] b, int off, int len)
b - 数据。
off - 数据的初始偏移量。
len - 要写入的字节数。
为什么当len大于b的数据长度但小于b数组的长度的时候最后一个文件会有内容缺失?




这是填1024的情况截图



这是填len的正常情况截图






占用空间相同,大小不同,但是大小大的文件内容却是缺失的。

有大神能讲解一下吗
...全文
129 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
m0_37645396 2018-07-20
  • 打赏
  • 举报
回复
引用 4 楼 stacksoverflow 的回复:
[quote=引用 3 楼 m0_37645396 的回复:]
[quote=引用 2 楼 stacksoverflow 的回复:]
最后一个文件没有内容缺失,是多了上一次的冗余。
1024的情况是错误的
比如倒数第二次循环min的内容为1234567890
最后一次循环,剩下的写的长度为2,写的内容为ab
那么1024的情况结果就变成了ab34567890

就是写了多余的东西进去了。


懂了 ,感谢。 刚才比对了一下 确实没注意到上面已经写完了。 这个只是多写的内容。
那为什么会往回写? 请教一下[/quote]
缓冲区在循环外定义byte[] min = new byte[1024];
file1.read(min)读不满的时候,后面的区域就是上次的存留内容了。
[/quote]


好的 感谢
verejava 2018-07-20
  • 打赏
  • 举报
回复
Java IO流 之 RandomAccessFile 多线文件拷贝

http://www.verejava.com/?id=16994721196019
stacksoverflow 2018-07-20
  • 打赏
  • 举报
回复
引用 3 楼 m0_37645396 的回复:
[quote=引用 2 楼 stacksoverflow 的回复:]
最后一个文件没有内容缺失,是多了上一次的冗余。
1024的情况是错误的
比如倒数第二次循环min的内容为1234567890
最后一次循环,剩下的写的长度为2,写的内容为ab
那么1024的情况结果就变成了ab34567890

就是写了多余的东西进去了。


懂了 ,感谢。 刚才比对了一下 确实没注意到上面已经写完了。 这个只是多写的内容。
那为什么会往回写? 请教一下[/quote]
缓冲区在循环外定义byte[] min = new byte[1024];
file1.read(min)读不满的时候,后面的区域就是上次的存留内容了。
m0_37645396 2018-07-20
  • 打赏
  • 举报
回复
引用 2 楼 stacksoverflow 的回复:
最后一个文件没有内容缺失,是多了上一次的冗余。
1024的情况是错误的
比如倒数第二次循环min的内容为1234567890
最后一次循环,剩下的写的长度为2,写的内容为ab
那么1024的情况结果就变成了ab34567890

就是写了多余的东西进去了。


懂了 ,感谢。 刚才比对了一下 确实没注意到上面已经写完了。 这个只是多写的内容。
那为什么会往回写? 请教一下
stacksoverflow 2018-07-20
  • 打赏
  • 举报
回复
最后一个文件没有内容缺失,是多了上一次的冗余。
1024的情况是错误的
比如倒数第二次循环min的内容为1234567890
最后一次循环,剩下的写的长度为2,写的内容为ab
那么1024的情况结果就变成了ab34567890

就是写了多余的东西进去了。
m0_37645396 2018-07-20
  • 打赏
  • 举报
回复
不好意思第一次发帖。 看错了 版主能把分类改到SE吗

67,513

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧