免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 6068 | 回复: 6
打印 上一主题 下一主题

是否可以倒序(从文件尾开始)读二进制文件的? [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2008-03-24 14:40 |只看该作者 |倒序浏览
要读二进制文件,然后转换再比较。
由于有用的数据(实际就是最新的数据)都在文件尾部,这样从头开始读并转换比较的话,所费时间很长了。

是否有从文件尾部开始读的方法?这样只要处理很小一部分的数据就可以了,处理速度就可以大大加快了。

论坛徽章:
0
2 [报告]
发表于 2008-03-24 15:16 |只看该作者
换个方法思考不行吗?  把新数据都放在文件开头 不可以吗?

论坛徽章:
0
3 [报告]
发表于 2008-03-24 15:31 |只看该作者
:wink:

这个,不行。因为要处理的文件,格式不是我能控制的

我想从文件尾开始读文件,应该是不可行的,估计是操作系统的文件组织结构,已经限制了

还是只能从头读,只读取比较的那一部分标志,

if (不符合条件的话) {
    read(BINFIEL,$skipbyte,num) ;
      next ;}                                    # 原来在一个while循环里处理的

跳过去,不浪费时间处理了。直到条件符合,再开始处理转换,并写入文件

原来一个多小时干的活(符合不符合条件都转换),现在只要十来分钟吧(依情况而定),无用数据没有了,因此数据库加载时间也大大缩短,基本达到目的了

论坛徽章:
0
4 [报告]
发表于 2008-03-24 15:36 |只看该作者
要不你问问  咱们那个 放驴玩的版主!   他很强大!

论坛徽章:
0
5 [报告]
发表于 2008-03-24 15:48 |只看该作者
  

咋叫放驴玩的版主?

我想文件系统的组织形式限定了吧,记得似乎是链式的?文件头->数据块,下一块数据的地址->重复。。。

似乎这样的结构,就只能从头读起了,不可以反过来从尾读

不管怎样,我改了之后,性能相对可以满足了。以前转换一个多小时,加载一个来小时,现在二十来分钟差不多了吧,如果只取很小一部分的话

论坛徽章:
0
6 [报告]
发表于 2008-03-24 17:11 |只看该作者
perldoc -f seek

论坛徽章:
0
7 [报告]
发表于 2008-03-25 00:03 |只看该作者
如果你知道所需内容所在的字节位置的话就用seek
seek(FH, 100, SEEK_END)
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP