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;
    }

}
 
相关推荐
渣哥17 小时前
原来 Java 里线程安全集合有这么多种
java
间彧17 小时前
Spring Boot集成Spring Security完整指南
java
间彧17 小时前
Spring Secutiy基本原理及工作流程
java
Java水解18 小时前
JAVA经典面试题附答案(持续更新版)
java·后端·面试
洛小豆20 小时前
在Java中,Integer.parseInt和Integer.valueOf有什么区别
java·后端·面试
前端小张同学21 小时前
服务器上如何搭建jenkins 服务CI/CD😎😎
java·后端
ytadpole21 小时前
Spring Cloud Gateway:一次不规范 URL 引发的路由转发404问题排查
java·后端
华仔啊21 小时前
基于 RuoYi-Vue 轻松实现单用户登录功能,亲测有效
java·vue.js·后端
程序员鱼皮1 天前
刚刚 Java 25 炸裂发布!让 Java 再次伟大
java·javascript·计算机·程序员·编程·开发·代码