zeroieme 发表于 2016-9-27 22:56:43

mathematica的二进制文件读写就是这么弱

读1G数据要花1小时,没有同时读写打开文件方式,没有随机指针,不能只修改文件某一字节。

wayne 发表于 2016-9-28 18:50:25

怎么玩的呢,可否分享一下过程,然后我才知道你为啥会得出这样的结论,:)

原则上,读写文件的事情是跟编程语言无关的。

zeroieme 发表于 2016-9-29 00:21:00


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

读,type最大是128bit整数,比分128个字节快,一段1M数据用65536个UnsignedInteger128读。什么也不算,读了就丢,就是差不多1G1小时。
肯定不是硬件、系统问题。这台电脑看10G的蓝光片2小时没有问题。

wayne 发表于 2016-9-29 10:09:25

我公司电脑没有安装Mathematica。 只能查看在线文档来了解。
1)关于大文件操作,一个字节一个字节的搞,即便是C语言也会很慢的。所有语言,大致思路就是获取流的句柄,然后按块操作。Mathematica里句柄就是 InputStream ,OutputStream
2)随机指针可以用 StreamPosition来取,用 SetStreamPosition来随机游走。
3)至于按块操作的函数API,好像本来就没多少可说的。比如读某一块存储区域的数据,用 ReadList,BinaryReadList 等,写一块内容可以看看PutAppend , WriteString函数是否满足。 总之,按块操作的函数都不会错了。


回头有时间了,我就验证一下。

zeroieme 发表于 2016-9-29 12:32:33

我就是1M1M读就是 想办法搞块操作。InputStream和OutputStream是OpenRead、OpenWrite语句得到的句柄,受Open**的制约。

BinaryReadList是读1;;n之后顺便关闭流,

先写这些
页: [1]
查看完整版本: mathematica的二进制文件读写就是这么弱