【问题标题】:Write bytes into a file without erasing existing bytes [duplicate]将字节写入文件而不擦除现有字节[重复]
【发布时间】:2012-09-22 12:46:15
【问题描述】:

可能重复:
Best Way to Write Bytes in the Middle of a File in Java

我有一个需要写入字节的文件。

我知道我需要在文件中的哪个位置插入特定字节。为了清楚起见,我需要在文件中间写入字节而不擦除任何现有字节。然后整个操作应该会增加文件的长度。

最好的方法是什么?

【问题讨论】:

标签: java java-io


【解决方案1】:

这样做的唯一方法是移动当前在路上的字节。根据您必须执行此操作的频率以及文件的大小,创建一个新文件、复制现有文件并在此过程中插入新字节通常是一个更好的主意。

如果您需要不经常更新文件,或者文件很小(最多可能 100 kb),您可以使用RandomAccessFile

  1. 使用setLength() 方法扩展文件,将要插入的字节数添加到length() 方法返回的任何内容中。
  2. 如果您有足够的内存,请创建一个 byte[] 来保存从插入点到文件前一个结尾的所有字节。
  3. 调用seek()定位到插入点
  4. 致电readFully() 填写您的临时数组
  5. 调用seek()定位插入点+要插入的字节数
  6. 调用 write() 在此时写入您的缓冲区
  7. 调用seek()在插入点重新定位
  8. 调用 `write() 写入新字节

如果您无法在第 2 步中创建足够大的数组,则必须在循环中使用较小的缓冲区执行第 3-6 步。为了提高效率,我会使用至少 64k 的缓冲区。

【讨论】:

    猜你喜欢
    • 2017-04-02
    • 1970-01-01
    • 1970-01-01
    • 2022-01-10
    • 1970-01-01
    • 2013-01-04
    • 2014-04-10
    • 2016-09-01
    相关资源
    最近更新 更多