[英]RandomAccessFile unexpected behavior for seek and write or write with offset
我不明白兩者之間有什么區別
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:
從指定的字節數組開始將len個字節從offset偏移量寫入此文件。
參數 :
b
數據。
off
數據中的起始偏移量。
len
要寫入的字節數。
傳遞給write(byte[], int, int)
的offset參數不是文件的偏移量,而是傳遞給字節數組的偏移量。
您的第一個代碼段將RandomAccessFile
放置在位置offset
,然后從該位置的數據數組的開頭寫入getSize()
字節。
您的第二個代碼段不更改RandomAccessFile
的位置(這可能意味着開始在文件的開頭進行寫入),然后寫入數據數組的getSize()
字節,從字節數組中位置offset
的字節開始。
在前者中,偏移量位於您正在訪問的文件中。 在后面,它是數組的偏移量。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.