gpt4 book ai didi

java - RandomAccessFile 查找和写入或使用偏移量写入的意外行为

转载 作者:行者123 更新时间:2023-12-01 17:48:41 26 4
gpt4 key购买 nike

我不明白有什么区别

RandomAccessFile raf = new RandomAccessFile(file, "rw");
int offset = getOffset();
byte[] dataInBytes = getData();
raf.seek(offset);
raf.write(dataInBytes, 0, getSize())'

...
byte[] dataInBytes = getData();
raf.write(dataInBytes, offset, getSize());

我认为先查找然后写入相当于使用带有偏移量而不是零的写入函数。但似乎事实并非如此。我还不知道有什么区别,我只需要通过单元测试,第二个版本通过单元测试,而第一个版本没有。

这两种方法有什么区别?

最佳答案

查看 RandomAccessFile#write(byte[]. int, int) 的 JavaDoc :

Writes len bytes from the specified byte array starting at offset off to this file.
Parameters:
b - the data.
off - the start offset in the data.
len - the number of bytes to write.

您传递给 write(byte[], int, int) 的偏移量参数不是文件的偏移量,而是您传递的字节数组的偏移量。

您的第一个代码片段将 RandomAccessFile 定位在 offset 位置,然后从该位置的数据数组开头写入 getSize() 字节位置。

您的第二个代码片段不会更改 RandomAccessFile 中的位置(这可能意味着从文件开头开始写入),然后写入 getSize() 字节数据数组的位置,从字节数组中 offset 位置的字节开始。

关于java - RandomAccessFile 查找和写入或使用偏移量写入的意外行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52690965/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com