字符串压缩与解压

项目中一些大文本需要存数据库,为减少数据库的IO,对文本进行压缩。取出来的时候再解压缩
    /**
     * 字符串压缩
     * @param input
     * @return
     */
    public static final byte[] compress(byte[] input) {
        if (input == null) {
            return null;
        }
        Deflater compressor = new Deflater();
        compressor.setLevel(Deflater.BEST_SPEED); //调整压缩策略,这里使用了最快速的压缩方式
        compressor.setInput(input);
        compressor.finish();
        int len = input.length;
        ByteArrayOutputStream bos = new ByteArrayOutputStream(len);
        while (!compressor.finished()) {
            byte[] buf = new byte[len];
            int count = compressor.deflate(buf);
            if (count > 0) {
                bos.write(buf, 0, count);
            }
        }
        return bos.toByteArray();
    }

    /**
     * 解压缩
     * @param compressed
     * @return
     */
    public static final byte[] decompress(byte[] compressed) {
        if (compressed == null) {
            return null;
        }
        try {
            Inflater decompressor = new Inflater();
            decompressor.setInput(compressed);
            ByteArrayOutputStream bos = new ByteArrayOutputStream();
            int len = compressed.length << 2;
            while (!decompressor.finished()) {
                byte[] buf = new byte[len];
                int count = decompressor.inflate(buf);
                if (count > 0) {
                    bos.write(buf, 0, count);
                }
            }
            return bos.toByteArray();
        } catch (DataFormatException e) {
            return compressed;
        }
    }

猜你喜欢

转载自rainshow.iteye.com/blog/1076033