找回密码
 欢迎注册
查看: 16767|回复: 4

[灌水] mathematica的二进制文件读写就是这么弱

[复制链接]
发表于 2016-9-27 22:56:43 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?欢迎注册

×
读1G数据要花1小时,没有同时读写打开文件方式,没有随机指针,不能只修改文件某一字节。
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
发表于 2016-9-28 18:50:25 | 显示全部楼层
怎么玩的呢,可否分享一下过程,然后我才知道你为啥会得出这样的结论,

原则上,读写文件的事情是跟编程语言无关的。
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
 楼主| 发表于 2016-9-29 00:21:00 | 显示全部楼层

说写吧。简单的,怎么修改一个1K字节文件中的第100个字节?我查不到资料。
OpenWrite   打开一个输出到文件的流,清除该文件以前的内容
OpenAppend   打开一个输出到文件的流,向已有内容追加数据

读,type最大是128bit整数,比分128个字节快,一段1M数据用65536个UnsignedInteger128读。什么也不算,读了就丢,就是差不多1G1小时。
肯定不是硬件、系统问题。这台电脑看10G的蓝光片2小时没有问题。
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
发表于 2016-9-29 10:09:25 | 显示全部楼层
我公司电脑没有安装Mathematica。 只能查看在线文档来了解。
1)关于大文件操作,一个字节一个字节的搞,即便是C语言也会很慢的。所有语言,大致思路就是获取流的句柄,然后按块操作。Mathematica里句柄就是 InputStream ,OutputStream
2)随机指针可以用 StreamPosition来取,用 SetStreamPosition来随机游走。
3)至于按块操作的函数API,好像本来就没多少可说的。比如读某一块存储区域的数据,用 ReadList,BinaryReadList 等,写一块内容可以看看  PutAppend , WriteString函数是否满足。 总之,按块操作的函数都不会错了。


回头有时间了,我就验证一下。
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
 楼主| 发表于 2016-9-29 12:32:33 | 显示全部楼层
我就是1M1M读就是 想办法搞块操作。InputStream和OutputStream是OpenRead、OpenWrite语句得到的句柄,受Open**的制约。

BinaryReadList[file,type,n]是读1;;n之后顺便关闭流,

先写这些
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
您需要登录后才可以回帖 登录 | 欢迎注册

本版积分规则

小黑屋|手机版|数学研发网 ( 苏ICP备07505100号 )

GMT+8, 2024-11-22 13:24 , Processed in 0.026700 second(s), 17 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表