java FileChannel.map 内存映射会修改文件,怎么回事?

tan8888 2014-02-18 05:26:38
有一个文件比较大,大约10多G,想用多线程读文件,想用内存映射的方法来读,由于很少用nio,在网上找了一段代码,原贴是: http://hi.baidu.com/leejun_2005/item/317238ea497786e6fa42ba90 ,但发现,这段代码执行后,会把原文件给修改了,写入一大段二制代码,原来的文件竟然被修改了!但从头到尾,没看到有修改原文件的代码,请问为什么内存映射会把原来文件修改了?怎么修改才不会修改原文件?
...全文
223 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
tan8888 2014-02-19
  • 打赏
  • 举报
回复
引用 1 楼 preferme 的回复:
内存映射的这种方式虽然高效,但是也会存在适用范围。 比如:被映射的文件不能超过2G的大小,这个源于早期的操作系统不支持。 另外,在使用内存映射这种方式的时候,映射的MAP可以采用只读方式进行读取,这样就不会有更改源文件的问题了。
不太明白,已经在fc.map(FileChannel.MapMode.READ_ONLY, start, end); 这里设置了只读了,但最后还是会出文件更改,怎么也没想明白这是怎么回事
冰思雨 2014-02-19
  • 打赏
  • 举报
回复
内存映射的这种方式虽然高效,但是也会存在适用范围。 比如:被映射的文件不能超过2G的大小,这个源于早期的操作系统不支持。 另外,在使用内存映射这种方式的时候,映射的MAP可以采用只读方式进行读取,这样就不会有更改源文件的问题了。

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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