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

}
 
相关推荐
Arva .9 分钟前
Spring Boot 配置文件
java·spring boot·后端
IT_Octopus9 分钟前
https私人证书 PKIX path building failed 报错解决
java·spring boot·网络协议·https
程序员清风26 分钟前
网易三面:Java中默认使用的垃圾回收器及特点分版本说说?
java·后端·面试
这周也會开心35 分钟前
本地部署javaweb项目到Tomcat的三种方法
java·tomcat
小蒜学长44 分钟前
jsp基于JavaWeb的原色蛋糕商城的设计与实现(代码+数据库+LW)
java·开发语言·数据库·spring boot·后端
摇滚侠1 小时前
Spring Boot中使用线程池来优化程序执行的效率!笔记01
java·spring boot·多线程
毕设源码-江学长1 小时前
计算机毕业设计java共享茶室预约微信小程序 微信小程序中的共享茶室预订平台 茶室共享预约小程序的设计与开发
java·微信小程序·课程设计
卡布奇诺-海晨2 小时前
2025版本的idea解决Git冲突
java·git·intellij-idea
Flash Dog2 小时前
【MyBatis】——执行过程
java·mybatis
Li_7695322 小时前
2025.2.X 版本 IDEA maven 打包乱码问题的解决
java·maven·intellij-idea