2012-03-10 140 views
1

我試圖使用隨機存取文件來更新二叉樹更新文件的一部分。但我只想更新剛被修改的節點,而不是每次添加節點時都重寫整個樹。我至今兩個問題:使用隨機訪問文件Java中

我有一個問題,寫一個對象來使用RandomAccessFile的文件。由於它是一個節點對象,RAF沒有任何讀/寫方法。我沒有爲我的樹類實現Serializable,但仍然不確定如何將樹寫入文件。

Node<String> mynode = new Node<String>(); 
RandomAccessFile raf = new RandomAccessFile("raf.txt", "rw"); 
raf.write(mynode, 0, 100); 

,我正在一個錯誤,因爲mynode不是byte[]

我的第二個問題是我不知道如何尋求覆蓋該文件。我所做的是在節點中爲id添加一個額外的字段,並且爲id:position保留一個hashmap來定位修改的位置。不知道這是正確的方式

+2

你爲什麼想將其存儲在一個文件?在現實世界中,你幾乎總是想要使用數據庫。 – 2012-03-10 02:20:01

回答

1

我不認爲你的方法是去工作,你覺得會的方式。 RandomAccessFile用於在任意位置讀取和寫入字節。你當然可以把你的對象和序列化到一個字節數組,然後你寫入一個RAF(或者只是使用fileoutputstream寫入序列化的字節) - 但是當你想更新一條記錄時,這不會對你有幫助,因爲序列化的表單的記錄可能會有不同的長度,每次你改變它。

正如在評論中提及了,你正在尋找的是一個數據庫 - 一個更高層次的抽象比的RandomAccessFile會給你訪問字節的簡單線性鏈。

如果您正在尋找一個可以讀取和寫入記錄(即輕量級嵌入式數據庫)的基於文件的存儲系統,請查看jdbm2 - 它也內置了b-tree結構(這種結構更好對於基於文件的存儲而不是二叉樹)。