Leveldb

在 Java 中載入 LevelDB

  • October 16, 2017

我正在嘗試遍歷 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();
   }

}

}

我的程式碼有兩個問題。

  1. 文件夾的來源不正確,所以我沒有抓取正確的文件。
  2. Dain 的 levelDB 僅適用於 .sst 文件,不適用於 .ldb。由於與 Windows 核心文件衝突,LevelDB 已更新。在我修復文件夾問題後,這導致了我的問題。

我希望這對將來的其他人有所幫助。

引用自:https://ethereum.stackexchange.com/questions/26990