我正在對正在使用的庫進行一些更改。爲了減少內存使用量,磁帶庫將其臨時數據寫入磁盤,而不是將其保存在內存中。但是,對於我的使用場景,將其保存在內存中效率更高。它也有一些併發問題,因爲它的臨時文件具有不變的名稱,因此不能在不同的線程中同時運行(因爲線程會損壞對方的數據)。Java的FileChannel內存版本
因此,我需要更改庫,以便它將所有數據保存在內存中。我最初並沒有編寫這個庫,因此我對編寫代碼做出了很大的改變並不是很舒服。因此,我希望儘可能少地進行重構。寫入磁盤的代碼非常簡單。這裏的一個(稍微簡化的)例子:
final FileChannel fileChannel = this.randomAccessFile.getChannel();
fileChannel.position(calculatePosition());
while (blockData.hasRemaining())
{
fileChannel.write(blockData);
}
塊的讀數是非常相似的(即,它使用一個FileChannel,它從一個RandomAccessFile的所得到的)。
感覺最簡單的解決方案是如果我可以使用FileChannel的一些實現,FileChannel映射到內存中的某個位置而不是文件。我知道我可以使用FileChannel的map-method將文件映射到內存中的某個位置。但是,這是另一回事。這給了我一個「內存API」文件。我想要一個針對某些內存的FileChannel接口。有沒有可用的實現?