【问题标题】:Write to an offset using DataOutputStream [duplicate]使用 DataOutputStream 写入偏移量 [重复]
【发布时间】:2016-11-14 07:44:15
【问题描述】:

在我的项目中,我们正在使用DataOutputStream 编写一个文件。我们正在编写不同的数据类型,如 short、byte、int 和 long,我们在 DataOutputStream 中使用各自的方法,如 writeShort()writeByte() 等。

现在,我想编辑该文件中特定偏移量的一条记录。我知道该记录开始的偏移量,但我不确定写入文件的正确方法是什么,因为DataOutputStream 中支持偏移量的唯一方法是采用byte[] 的方法。

我想写整条记录,它是上面提到的不同数据类型的组合。

谁能告诉我正确的方法是什么?

【问题讨论】:

  • 记录的大小是固定的吗?
  • 不,记录有不同的大小。
  • "DataoutputStream 中唯一支持偏移量的方法是采用 byte[] 的方法" => 方法 DataOutputStream#write(byte[], int, int) 中的偏移量表示您正在写入的 data 中的偏移量,不是 stream 中的某个位置。
  • 另外:流的本质是不通过使用偏移或类似的方式提供随机访问。请参阅 Nicolas 的答案以获取替代方案。

标签: java offset dataoutputstream


【解决方案1】:

在您的情况下,您应该使用RandomAccessFile 以便在给定位置的文件中读取和/或写入某些内容,这要归功于它的方法@987654322 @。

例如:

try (RandomAccessFile raf = new RandomAccessFile(filePath, "rw")) {
    raf.seek(offset);
    // do something here
}

注意: writeShort()writeByte() 等方法及其读取对应物可直接从 RandomAccessFile 类中获得,因此单独使用就足够了。

【讨论】:

  • 当然,如果记录不是固定大小的,如果你只是覆盖中间的内容,就有可能损坏文件。
猜你喜欢
  • 2012-12-28
  • 2014-10-10
  • 1970-01-01
  • 1970-01-01
  • 2018-04-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多