我有一個用例,其中我的多個線程正在將數據寫入同一個文件通道(池),並且每個線程在文件中有偏移量,從它們可以開始寫入直到數據長度要寫。因此,當我從池中請求文件通道時,如果它已經打開並且將返回該文件通道(打開的文件可能是新文件,即大小= 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)中的內容是什麼。操作系統如何分配這個中間空間?
在Linux上它會是0,並且該文件可能(可能)很稀疏 - 它實際上不會爲沒有寫入而跳過的字節使用空間,除非實際寫入內容。 – Jonathan 2010-10-21 18:28:34