【问题标题】: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 将处理大部分“文书工作”,但您需要格外小心以符合规范对其操作的规定。

标签: java file large-files overwrite randomaccessfile


【解决方案1】:

这里并不是一个真正的答案,只是一个建议。抱歉,我还不能评论状态

打开文件 一次将这些值存储在内存中的小块中 然后在清除内存和途中的东西的同时写入另一个文件

【讨论】:

    【解决方案2】:

    大多数文件系统并不是真正的随机访问,因此从实际的角度来看,如果不从磁盘读取整个文件并将其写回磁盘,就很难或不可能修改文件的中间部分。可能您需要做的是一次读取文件的一个部分,适当地修改该部分,然后将其写回临时文件。完成后,您可以将原始文件替换为临时文件。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-09-11
      • 2022-01-25
      • 2018-11-03
      • 2010-10-16
      • 2023-03-23
      • 1970-01-01
      • 1970-01-01
      • 2023-04-09
      相关资源
      最近更新 更多