准备操作
1.首先levelDB使用k-v形式存储,但是k-v都是byte[]形式存储,在区块链中主要是存储区块头文件,所以要将hash值和数据转换为byte[]数组形式。
2.java的序列化与反序列化
3.其次是levelDB的配置
pom.xml
<dependency>
<groupId>org.iq80.leveldb</groupId>
<artifactId>leveldb</artifactId>
<version>0.7</version>
</dependency>
<dependency>
<groupId>org.iq80.leveldb</groupId>
<artifactId>leveldb-api</artifactId>
<version>0.7</version>
</dependency>
java的序列化与反序列化:
1.强制转化(byte)
2.String string = “hello world”;
string转化为byte[]数组
byte[] bytes = string.getBytes();
byte[]转为string
String s = new String(bytes);
3.实现Serializable接口:
1.首先声明class XXX implements Serializable{}
2.声明一个工具类 public class SerializeUtil
{
//传输保存的文件位置
private static String file_name = “d://obj.bin”;
//序列化方法
public void writeObj(Serializable s){ ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream(file_name));
oos.writeObject(s);
System.out.println("序列化成功");
oos.close();
}
//反序列化方法
public object readobject(){
ObjectInputStream input = new ObjectInputStream(new FileInputStream(file_name));
obj = input.readObejct();
input.close();
return object;}
}
3.实现工具类对象,显示把xxx作为参数传入序列化方法中,随后反序列化方法(有时候需要进行类型转化,不过传来为object型,转换挺方便的)
———-levelDB操作:
准备好数据之后,先声明三个对象:(三个类都为导入的类,不用自己编写)
DBFactory factory = new Iq80DBFactory();
Options options = new Options().createIfMissing(true);
DB db = factory.open(new File(path), options);
db.put(byte[],byte[]);//写操作
声明个操作对象
DBIterator iterator=db.iterator();
while(iterator.hasNext()) {
Map.Entry