Leveldb
在 Java 中載入 LevelDB
我正在嘗試遍歷 ethereum ldb 文件。當我執行這段程式碼時,我的迭代器認為 ropsten 的測試網區塊鏈上沒有儲存任何內容。沒有錯誤,iter 進入 for 循環的測試,看它是否 hasNext()。所以它正確載入數據庫,只是不辨識鍵。
我正在使用 Dain 的LevelDB API。
public static void main(String[] args) throws IOException { // TODO Auto-generated method stub Options options = new Options(); options.createIfMissing(false); ReadOptions ROoptions = new ReadOptions(); try { DB db = factory.open(new File("chaindata"), options); ROoptions.snapshot(db.getSnapshot()); try { // Use the db in here.... System.out.println("Creating itr"); DBIterator iterator = db.iterator(ROoptions); try { System.out.println("Testing itr"); for (iterator.seekToFirst(); iterator.hasNext(); iterator.next()) { String key = asString(iterator.peekNext().getKey()); String value = asString(iterator.peekNext().getValue()); System.out.println(key + " = " + value); } } finally { // Make sure you close the iterator to avoid resource leaks. iterator.close(); } } finally { // Make sure you close the db to shutdown the // database and avoid resource leaks. db.close(); } } catch (FileNotFoundException E) { System.out.println("File not found! " + E); throw new FileNotFoundException(); } } }
我的程式碼有兩個問題。
- 文件夾的來源不正確,所以我沒有抓取正確的文件。
- Dain 的 levelDB 僅適用於 .sst 文件,不適用於 .ldb。由於與 Windows 核心文件衝突,LevelDB 已更新。在我修復文件夾問題後,這導致了我的問題。
我希望這對將來的其他人有所幫助。