`

java字符串压缩

    博客分类:
  • JAVA
 
阅读更多

采用jdk自带的gzip和zip方法进行压缩。并用apache common 的base64进行压缩字符串的转码。base64的转码需要导入apache的codec包,不要使用sun的base64转码包。

 

import java.io.ByteArrayInputStream; 
import java.io.ByteArrayOutputStream; 
import java.io.IOException; 
import java.util.zip.GZIPInputStream; 
import java.util.zip.GZIPOutputStream; 
import java.util.zip.ZipEntry; 
import java.util.zip.ZipInputStream; 
import java.util.zip.ZipOutputStream; 
import org.apache.commons.codec.binary.Base64; 
/** 
 * author:mujunfeng
 * desc:字符串压缩/解压工具,提供gzip和zip两种方式,压缩后的字符串使用base64转码 
 * */
 public class ZipUtils { 
  
    /** 
     *  
     * 使用gzip进行压缩 
     */
    public static String gzip(String primStr) { 
        if (primStr == null || primStr.length() == 0) { 
            return primStr; 
        } 
  
        ByteArrayOutputStream out = new ByteArrayOutputStream(); 
  
        GZIPOutputStream gzip = null; 
        try { 
            gzip = new GZIPOutputStream(out); 
            gzip.write(primStr.getBytes()); 
        } catch (IOException e) { 
            e.printStackTrace(); 
        } finally { 
            if (gzip != null) { 
                try { 
                    gzip.close(); 
                } catch (IOException e) { 
                    e.printStackTrace(); 
                } 
            } 
        } 
  
        return new String(new Base64().encode(out.toByteArray())); 
    } 
  
    /** 
     * 使用gzip进行解压缩 
     * @param compressedStr 
     * @return 解压后的字符串 
     */
    public static String gunzip(String compressedStr) { 
        if (compressedStr == null) { 
            return null; 
        } 
  
        ByteArrayOutputStream out = new ByteArrayOutputStream(); 
        ByteArrayInputStream in = null; 
        GZIPInputStream ginzip = null; 
        byte[] compressed = null; 
        String decompressed = null; 
        try { 
            compressed = new Base64().decode(compressedStr.getBytes()); 
            in = new ByteArrayInputStream(compressed); 
            ginzip = new GZIPInputStream(in); 
  
            byte[] buffer = new byte[1024]; 
            int offset = -1; 
            while ((offset = ginzip.read(buffer)) != -1) { 
                out.write(buffer, 0, offset); 
            } 
            decompressed = out.toString(); 
        } catch (IOException e) { 
            e.printStackTrace(); 
        } finally { 
            if (ginzip != null) { 
                try { 
                    ginzip.close(); 
                } catch (IOException e) { 
                } 
            } 
            if (in != null) { 
                try { 
                    in.close(); 
                } catch (IOException e) { 
                } 
            } 
            if (out != null) { 
                try { 
                    out.close(); 
                } catch (IOException e) { 
                } 
            } 
        } 
  
        return decompressed; 
    } 
  
    /** 
     * 使用zip进行压缩 
     *  
     * @param str 
     *            压缩前的文本 
     * @return 返回压缩后的文本 
     */
    public static final String zip(String str) { 
        if (str == null) 
            return null; 
        byte[] compressed; 
        ByteArrayOutputStream out = null; 
        ZipOutputStream zout = null; 
        String compressedStr = null; 
        try { 
            out = new ByteArrayOutputStream(); 
            zout = new ZipOutputStream(out); 
            zout.putNextEntry(new ZipEntry("0")); 
            zout.write(str.getBytes()); 
            zout.closeEntry(); 
            compressed = out.toByteArray(); 
            compressedStr = new String(new Base64().encode(compressed)); 
        } catch (IOException e) { 
            compressed = null; 
        } finally { 
            if (zout != null) { 
                try { 
                    zout.close(); 
                } catch (IOException e) { 
                } 
            } 
            if (out != null) { 
                try { 
                    out.close(); 
                } catch (IOException e) { 
                } 
            } 
        } 
        return compressedStr; 
    } 
  
    /** 
     * 使用zip进行解压缩 
     *  
     * @param compressed 
     *            压缩后的文本 
     * @return 解压后的字符串 
     */
    public static final String unzip(String compressedStr) { 
        if (compressedStr == null) { 
            return null; 
        } 
  
        ByteArrayOutputStream out = null; 
        ByteArrayInputStream in = null; 
        ZipInputStream zin = null; 
        String decompressed = null; 
        try { 
            byte[] compressed = new Base64().decode(compressedStr.getBytes()); 
            out = new ByteArrayOutputStream(); 
            in = new ByteArrayInputStream(compressed); 
            zin = new ZipInputStream(in); 
            zin.getNextEntry(); 
            byte[] buffer = new byte[1024]; 
            int offset = -1; 
            while ((offset = zin.read(buffer)) != -1) { 
                out.write(buffer, 0, offset); 
            } 
            decompressed = out.toString(); 
        } catch (IOException e) { 
            decompressed = null; 
        } finally { 
            if (zin != null) { 
                try { 
                    zin.close(); 
                } catch (IOException e) { 
                } 
            } 
            if (in != null) { 
                try { 
                    in.close(); 
                } catch (IOException e) { 
                } 
            } 
            if (out != null) { 
                try { 
                    out.close(); 
                } catch (IOException e) { 
                } 
            } 
        } 
        return decompressed; 
    } 
}

 

分享到:
评论

相关推荐

    java压缩字符串

    java压缩字符串

    Java 字符串压缩和文件压缩代码

    在Java编程中,字符串压缩和文件压缩是常见的数据处理任务,尤其在大数据传输、存储优化等方面扮演着重要角色。本文将深入探讨Java中如何实现字符串和文件的压缩,以及涉及的相关技术。 首先,字符串压缩通常涉及到...

    LZ78算法实现对任意字符串的压缩与解压

    它通过查找输入字符串中的最长匹配前缀来构建一个新的编码,从而实现数据的压缩。这种算法的主要思想是创建一个动态更新的字典,字典中的条目是输入字符串中的已编码子串。 在Java环境中实现LZ78算法,首先我们需要...

    字符串的压缩与解压 java

    字符串的压缩和解压,java语言编写,zip实现,代码编写

    java自带压缩方式的性能比较

    在Java编程语言中,内置了多种压缩和解压缩的方式,如Gzip和Zip。这篇博客“java自带压缩方式的性能比较”可能详细分析了这两种压缩方法的效率和应用场景。通过提供的代码文件`CompressTestMain.java`、`GzipUtils....

    java算法,实现压缩及解压缩

    ### Java算法:实现压缩及解压缩 #### 一、压缩功能实现 在Java中实现文件压缩功能主要依赖于`java.util.zip`包中的类。以下是对压缩代码的详细解析: ##### 1. 导入所需类库 ```java import java.io....

    经典算法--字符串的压缩

    关于经典算法--压缩字符串(将字符串内连续重复出现的字符进行压缩),个人的想法

    quicklz cocos2dx 压缩 字符串压缩

    QuickLZ是一款高效的开源压缩库,它在Cocos2d-x框架中被广泛用于字符串压缩。Cocos2d-x是一个跨平台的2D游戏开发框架,支持多种操作系统,包括iOS、Android、Windows等。字符串压缩在游戏开发中非常重要,因为它可以...

    string-yasuo.zip_字符串压缩

    - 包内的“字符串压缩程序”很可能是用某种编程语言实现的,如Python、Java或C++,它可能包含了上述提到的或其它字符串压缩算法的实现。 总的来说,字符串压缩是信息技术中的关键组成部分,它在节省存储资源、提高...

    字符串压缩

    在C++编译环境下的字符串压缩,关于字符的压缩问题。

    Java 字符串操作源码实例集.rar

    这些基本操作是Java字符串处理的核心。通过实践这些实例,初学者可以更好地理解字符串操作的原理和用法,为以后的开发打下坚实基础。在压缩包中找到的"codesc.net"可能是包含这些实例代码的文件,打开并运行这些代码...

    字符串解压缩

    字符串压缩通常基于特定的算法,如霍夫曼编码、LZ77、LZ78、Run-Length Encoding (RLE) 或者Burrows-Wheeler Transform (BWT)。这些算法的目标是减少字符串的存储空间,通过识别和利用字符串中的重复模式或统计特性...

    文件解压和压缩 解决中文乱码

    在IT行业中,文件的压缩和解压是一项...总的来说,理解和掌握文件压缩和解压的原理,以及处理中文乱码的方法,对Java开发者来说至关重要,这能够帮助他们有效地处理各种文件操作需求,尤其是涉及到多语言环境的时候。

    浅谈Java字符串Java开发Java经验技巧共11页.p

    在描述中提到了“浅谈Java字符串Java开发Java经验技巧共11页.pdf.zip”,这提示我们这是一份PDF格式的文档,压缩成了ZIP文件,共有11页内容。通常这样的文档会涵盖一个或多个特定主题,比如字符串的创建、操作、比较...

    java实现压缩字符串和java字符串过滤

    在Java编程中,字符串处理是常见的任务之一。本问题提供了两个具体的字符串操作...以上就是关于Java实现字符串过滤和字符串压缩的详细解释,以及相应的代码实现。在实际开发中,可以依据具体需求进行适当的优化和调整。

    C#、java 字符流跨平台数据解压缩

    字符串采用UTF-8编码获得byte数组,保证两端通用,如果应用对编码有要求,两端同时改为其他编码方式也可以 从Java和C#的代码看,两者代码上有细微差别,但是思路方面两者基本是一样的 另外一个备忘,Java里边,...

    Java源码海量字符串的快速操作.rar

    在Java编程中,处理海量字符串是一项常见的挑战,尤其是在大数据处理、日志分析或者文本挖掘等场景。本资源“Java源码海量字符串的快速操作”旨在提供解决方案,通过优化的算法和数据结构,提高大规模字符串操作的...

    SQL2JAVA-java字段串代码拼接小工具

    标题中的“SQL2JAVA-java字段串代码拼接小工具”是指一个辅助开发的软件,它主要功能是帮助程序员便捷地在Java代码和SQL语句之间进行转换,特别是处理字符串拼接的问题。在软件开发过程中,尤其是在数据库交互时,...

    字符串-Java解题分析-学习资料.zip

    字符串-Java解题分析-学习资料.zip 是一...无论是初学者还是有一定经验的开发者,都可以从中获取有关Java字符串处理的实用知识和技能。 场景目标: 技能提升:帮助开发者提升解决字符串相关问题的能力,提高编程水平。

Global site tag (gtag.js) - Google Analytics