试图覆盖文件中间的数据而不影响文件的开头
Posted
技术标签:
【中文标题】试图覆盖文件中间的数据而不影响文件的开头【英文标题】:Trying to overwrite data in the middle of a file without affecting the beginning of the file 【发布时间】:2014-05-08 11:37:41 【问题描述】:我有一个算法可以乱序计算向量的分量(字节)。我将向量存储在一个文件中,因为当我真正运行它时,向量将是数百万字节长。但作为一个简化的例子,我想从一个空文件开始:
-1 -1 -1 -1 -1 -1 -1 -1
那么我的算法会一次填写两个值:
-1 -1 4 7 -1 -1 -1 -1
然后
-1 -1 4 7 -1 -1 3 9
等等。直到所有的值都被填写。这可能吗?我尝试过使用随机访问文件,但是当您使用 seek() 方法时,它会在我要编辑的值之前为所有值填充 0,从而删除我的算法之前所做的任何计算。因为我需要这个程序来处理大量的数字序列,所以不能将整个文件拉入内存。有任何想法吗?
【问题讨论】:
看看这个:meta.stackexchange.com/questions/66377/what-is-the-xy-problem 然后,请更新您的问题! :) 是的,可以这样做。棘手,但可能。首先,您必须将文件作为 RandomAccessFile 打开。 RAF 将处理大部分“文书工作”,但您需要格外小心以符合规范对其操作的规定。 【参考方案1】:这里并不是一个真正的答案,只是一个建议。抱歉,我还不能评论状态
打开文件 一次将这些值存储在内存中的小块中 然后在清除内存和途中的东西的同时写入另一个文件
【讨论】:
【参考方案2】:大多数文件系统并不是真正的随机访问,因此从实际的角度来看,如果不从磁盘读取整个文件并将其写回磁盘,就很难或不可能修改文件的中间部分。可能您需要做的是一次读取文件的一个部分,适当地修改该部分,然后将其写回临时文件。完成后,您可以将原始文件替换为临时文件。
【讨论】:
以上是关于试图覆盖文件中间的数据而不影响文件的开头的主要内容,如果未能解决你的问题,请参考以下文章
Core Audio - 将数据写入音频文件的开头或中间(结尾以外的地方)