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

}
 
相关推荐
时艰.4 小时前
java性能调优 — 高并发缓存一致性
java·开发语言·缓存
落花流水 丶4 小时前
Java 多线程完全指南
java
jxy99984 小时前
mac mini 安装java JDK 17
java·开发语言·macos
biyezuopinvip4 小时前
基于Spring Boot的企业网盘的设计与实现(毕业论文)
java·spring boot·vue·毕业设计·论文·毕业论文·企业网盘的设计与实现
Hx_Ma164 小时前
SSM搭建(三)Spring整合SpringMVC框架
java·后端·spring
无风听海4 小时前
.NET10之ASP.NET Core的Filter管线
java·asp.net·.net
少许极端4 小时前
算法奇妙屋(二十八)-递归、回溯与剪枝的综合问题 1
java·算法·深度优先·剪枝·回溯·递归
Boop_wu4 小时前
简单介绍 JSON
java·开发语言
知识即是力量ol4 小时前
初识 Kafka(一):分布式流平台的定义、核心优势与架构全景
java·分布式·kafka·消息队列
爱吃生蚝的于勒4 小时前
【Linux】线程概念(一)
java·linux·运维·服务器·开发语言·数据结构·vim