簡體   English   中英

RandomAccessFile的查找和寫入或帶偏移量的寫入的意外行為

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM