我正在尋找與Java中的ArrayList相同的數據結構,該數據結構將項目保存在磁盤而不是內存中。 java是否有這樣的數據結構? 謝謝如何保存磁盤上的列表項而不是Java中的內存
我想要一個動態結構,將項目保存在內存上,當其大小超過某個值時,將新項目保存在磁盤上,直到大小低於該值。
我正在尋找與Java中的ArrayList相同的數據結構,該數據結構將項目保存在磁盤而不是內存中。 java是否有這樣的數據結構? 謝謝如何保存磁盤上的列表項而不是Java中的內存
我想要一個動態結構,將項目保存在內存上,當其大小超過某個值時,將新項目保存在磁盤上,直到大小低於該值。
你可以自己做:將ArrayList
序列化到磁盤。
確保列表中的內容是可序列化的,即列表中的對象應實現Serializable
接口。
然後
寫入文件:
ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream(fileName));
oos.writeObject(list);
oos.flush();
oos.close();
從文件中讀取:
ObjectInputStream ois = new ObjectInputStream(new FileInputStream(fileName));
List<YourClass> list = ois.readObject();
ois.close()
如果您需要經常更改此ArrayList的數據,更改磁盤映像,那麼爲什麼不考慮像http://www.hibernate.org/?好吧,它比ArrayList複雜得多,但也提供了更多的特性。
我想要一個動態結構,將項目保存在內存中,當其大小超過某個值時,將新項目保存在磁盤上,直到大小低於該值。 – user468889 2010-10-13 09:48:14
另一種存儲語言和傳輸中立優勢的方法是使用Google的Protocol Buffers。
只是爲了讓一套完整的答案了:)
XStream的是一個簡單的庫 序列化對象和XML之間 一次。現在
Person joe = new Person("Joe", "Walnes");
joe.setPhone(new PhoneNumber(123, "1234-456"));
joe.setFax(new PhoneNumber(123, "9999-999"));
,將其轉換爲XML,所有你需要做的就是做一個簡單的調用XStream的:
String xml = xstream.toXML(joe);
生成的XML看起來是這樣的:
<person>
<firstname>Joe</firstname>
<lastname>Walnes</lastname>
<phone>
<code>123</code>
<number>1234-456</number>
</phone>
<fax>
<code>123</code>
<number>9999-999</number>
</fax>
</person>
結賬http://jakarta.apache.org/jcs/。這提供了一種管理磁盤和RAM上的對象的方法。另一種可能的解決方案可能使用http://code.google.com/p/pcollections/
MapDB(mapdb.org)是一個將java對象持久保存到各種集合中的磁盤的庫:集合,映射,隊列。
它支持緩存,因此您可以在內存中使用最頻繁的項目。
看到https://dzone.com/articles/a-filebasedcollection-in-java-for-big-collections
try(FileBasedCollection<Integer> fbc = new FileBasedCollection<>()) {
for(int i = 1; i < 1000_000; i++) {
fbc.add(i);
}
long sum = 0;
try(FileBasedIterator<Integer> iter = fbc.iterator()) {
while(iter.hasNext()) {
Integer i = iter.next();
sum += i;
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println("sum: " + sum);
}
我想有一個動態的結構,節省了內存中,其大小超過一定值時,保存在磁盤上新的項目,直到大小低於價值的項目。 – user468889 2010-10-13 09:47:04
你需要自己實現這樣的結構。圍繞ArrayList的warpper,包含「add」,「remove」和「get」metnods的包裝,可以根據需要執行檢查並序列化和反序列化 – Nivas 2010-10-13 09:57:07
需求非常具體,所以我懷疑存在某個實現你想要什麼。如上所述,使用內部ArrayList和對象序列化編寫您自己的List實現聽起來像是最好的計劃。請注意,您必須實現* all * List方法,而不僅僅是添加,刪除和獲取。 – Qwerky 2010-10-13 10:19:20