java LevelDB工具类

POM依赖

复制代码
        <dependency>
            <groupId>org.iq80.leveldb</groupId>
            <artifactId>leveldb-api</artifactId>
            <version>0.12</version>
        </dependency>
        <dependency>
            <groupId>org.iq80.leveldb</groupId>
            <artifactId>leveldb</artifactId>
            <version>0.12</version>
        </dependency>

工具类

java 复制代码
package com.sec.iot.util;

import org.apache.commons.lang3.StringUtils;
import org.iq80.leveldb.*;
import org.iq80.leveldb.impl.Iq80DBFactory;

import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

/**
 * levedb 工具类
 *
 */
public class LevelDBUtil {
    //单例
    public static final LevelDBUtil lu = new LevelDBUtil();
   // private final DBFactory factory = Iq80DBFactory.factory;

    private LevelDBUtil() {

    }
    //初始化连接
    private  static DB db = null;

    public static void init(String path){
        //leveldb只需要建立一次连接
        LevelDBUtil ldu = LevelDBUtil.lu;
        //"/scada/share/odbcleveldb"
        ldu.setPath(path);
        ldu.getConnect();
    }


    private boolean isConnect = false;

    //存储路径
    private String path;

    public void getConnect() {
        DBFactory factory = new Iq80DBFactory();
                //JniDBFactory.factory;
        // 默认如果没有则创建
        Options options = new Options();
        File file = new File(path);
        try {
            if (!isConnect) {//单列一个对象,而且只建立一次连接
                db = factory.open(file, options);
                isConnect = true;
            }
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }




  /*  public static boolean deleteAll(String prefix) {
        //String prefix = "UNIT";
        List<String> resultList = new ArrayList<>();
        DBIterator iterator = db.iterator();

        for (iterator.seek(prefix.getBytes()); iterator.hasNext(); iterator.next()) {
            String k = JniDBFactory.asString(iterator.peekNext().getKey());
            if (!k.startsWith(prefix)) {
                break;
            }
            delete(k);
        }
        try {
            iterator.close();
        } catch (IOException e) {
            e.printStackTrace();
        }

        return false;
    }*/


    /**
     * 拼接字符串
     *
     * @param arr
     * @return
     */
    public static String combine(Object... arr) {
        StringBuffer buffer = new StringBuffer();
        for (Object obj : arr) {
            buffer.append(obj);
        }
        return buffer.toString();
    }


    public synchronized static boolean put(String key, String data) {

        try {
           // db.put(JniDBFactory.bytes(key), JniDBFactory.bytes(data), new WriteOptions().sync(true));
            db.put(Iq80DBFactory.bytes(key),Iq80DBFactory.bytes(data),new WriteOptions().sync(true));

            return true;
        } catch (Exception e) {
            e.printStackTrace();

        }
        return false;
    }


    public synchronized static String get(String key) {
        if (StringUtils.isBlank(key)) {
            return null;
        }
        try {
//            byte[] r = db.get(JniDBFactory.bytes(key), new ReadOptions().fillCache(true).verifyChecksums(true));
//
//            return JniDBFactory.asString(r);
            byte[] r =  db.get(Iq80DBFactory.bytes(key),new ReadOptions().fillCache(true).verifyChecksums(true));

            return Iq80DBFactory.asString(r);
        } catch (Exception e) {
            e.printStackTrace();

        }

        return null;
    }



    public void close() {
        try {
            db.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    /**
     * 压缩数据
     */
    public synchronized static void compactData() {
        try {
            //全部压缩数据 已经删除的数据,从硬盘上清除;
            db.compactRange(null, null);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }


    public synchronized static boolean delete(String key) {
        if (StringUtils.isBlank(key)) {
            return false;
        }
        try {
            db.delete(Iq80DBFactory.bytes(key));

            return true;
        } catch (Exception e) {
            e.printStackTrace();
        }
        return false;
    }







    public void destroy() {
        close();
    }


    public String getPath() {
        return path;
    }

    public void setPath(String path) {
        this.path = path;
    }

}
 
相关推荐
2401_cf36 分钟前
为什么hadoop不用Java的序列化?
java·hadoop·eclipse
帮帮志41 分钟前
idea整合maven环境配置
java·maven·intellij-idea
LuckyTHP1 小时前
java 使用zxing生成条形码(可自定义文字位置、边框样式)
java·开发语言·python
无声旅者4 小时前
深度解析 IDEA 集成 Continue 插件:提升开发效率的全流程指南
java·ide·ai·intellij-idea·ai编程·continue·openapi
Ryan-Joee4 小时前
Spring Boot三层架构设计模式
java·spring boot
Hygge-star4 小时前
【数据结构】二分查找5.12
java·数据结构·程序人生·算法·学习方法
dkmilk4 小时前
Tomcat发布websocket
java·websocket·tomcat
工一木子5 小时前
【Java项目脚手架系列】第七篇:Spring Boot + Redis项目脚手架
java·spring boot·redis
哞哞不熬夜5 小时前
JavaEE--初识网络
java·网络·java-ee
等等5435 小时前
Java EE初阶——wait 和 notify
java·开发语言