2010-10-21 59 views
0

我有一個用例,其中我的多個線程正在將數據寫入同一個文件通道(池),並且每個線程在文件中有偏移量,從它們可以開始寫入直到數據長度要寫。因此,當我從池中請求文件通道時,如果它已經打開並且將返回該文件通道(打開的文件可能是新文件,即大小= 0),將以「rw」模式打開通道,否則它將返回緩存通道。問題是這個線程可能沒有特別的寫入數據,這意味着一個偏移量爲1,000,000的線程可能會在偏移量爲0的線程之前開始寫入。考慮我打開了一個新文件(size = 0),並且offset = 1,000,000的線程開始寫入數據(使用write(buffer, position) API)之前線程偏移量= 0.FileChannel的行爲RandomAccessFile

我的第一個問題:這是允許的,或者我會得到一些異常 其次,如果它允許:什麼是保證我的數據被正確書寫。 三。當我的(偏移量= 1,000,000)完成寫入文件時,空白空間(0-999,999)中的內容是什麼。操作系統如何分配這個中間空間?

回答

2

沒有真正想你所描述的東西,這裏是一個受過教育的猜測:

第一個問題:FileChannel是線程安全的,並記錄在案,以擴大文件的大小根據需要(「的文件時增加字節大小被寫入超出其當前的大小「),所以我會認爲這將被允許。

第二個問題:不能保證您的數據是正確寫入的;這完全取決於你作爲程序員的技能。 :)

第三個問題:我期望「空白空間」的字節內容將取決於操作系統,但是您可以編寫一個簡單的程序來輕鬆測試。

+0

在Linux上它會是0,並且該文件可能(可能)很稀疏 - 它實際上不會爲沒有寫入而跳過的字節使用空間,除非實際寫入內容。 – Jonathan 2010-10-21 18:28:34