`
san_yun
  • 浏览: 2651893 次
  • 来自: 杭州
文章分类
社区版块
存档分类
最新评论

通过gzip对字符串压缩

 
阅读更多

通过GZIPOutputStream,GZIPInputStream可以方便的对数据进行压缩,本以为很简单的代码,写好运行居然报错:

 

Exception in thread "main" java.io.EOFException: Unexpected end of ZLIB input stream
    at java.util.zip.InflaterInputStream.fill(InflaterInputStream.java:223)
    at java.util.zip.InflaterInputStream.read(InflaterInputStream.java:141)
    at java.util.zip.GZIPInputStream.read(GZIPInputStream.java:92)
    at java.io.FilterInputStream.read(FilterInputStream.java:90)
    at Main.main(Main.java:25)

 

代码很简单:

        ByteArrayOutputStream out = new ByteArrayOutputStream();
        GZIPOutputStream gzip = new GZIPOutputStream(out);
        gzip.write("testlalala2389223423sdfds383274llalall".getBytes());
        byte[] data = out.toByteArray();
        GZIPInputStream gunzip = new GZIPInputStream(new ByteArrayInputStream(data));
        data = new byte[gunzip.available()];
        gunzip.read(data);

 

打点分析:

 System.out.println("data_length "+data.length);

 System.out.println("data_available "+gunzip.available());

data_length 10
data_available 1

 

原因:

1.没有 gzip.close();

2. gunzip.available()不能获取正确的数据,改成while

 

完整的代码:

import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.util.zip.GZIPInputStream;
import java.util.zip.GZIPOutputStream;

public class Main {

    public static void main(String[] args) throws Exception {

        ByteArrayOutputStream out = new ByteArrayOutputStream();
        GZIPOutputStream gzip = new GZIPOutputStream(out);
        gzip.write("testlalala23892234分詞誒四是23sdfds383274llalall".getBytes("utf-8"));
        gzip.close();

        byte[] data = out.toByteArray();
        System.out.println("data_length " + data.length);

        GZIPInputStream gunzip = new GZIPInputStream(new ByteArrayInputStream(data));
        System.out.println("data_available " + gunzip.available());

        ByteArrayOutputStream outStream = new ByteArrayOutputStream();
        byte[] buffer = new byte[256];
        int n;
        while ((n = gunzip.read(buffer)) >= 0) {
            outStream.write(buffer, 0, n);
        }
        System.out.println(outStream.toString("utf-8"));
    }
}
 
分享到:
评论

相关推荐

    Delphi解压gzip字符串例程

    以下是使用Delphi和ZLib库进行gzip字符串压缩和解压的详细步骤: 1. **压缩gzip字符串**: - 首先,你需要将`ZLib`库导入到Delphi项目中。这通常涉及到将`DelphiZLib.123`这样的库文件添加到你的项目路径中,并...

    VB.NET字符串压缩函数

    VB.NET写的字符串压缩函数,使用.NET的Compression写的。

    delphi字符串压缩

    在IT行业中,字符串压缩是一种常见的优化技术,尤其是在Delphi编程环境下。Delphi是Pascal语言的一个强大版本,它提供了一套完整的开发工具,用于创建高效、高性能的应用程序。字符串压缩的目的是减小数据的存储空间...

    对字符串,字节数组进行GZIP压缩和解压缩

    对字符串,字节数组进行GZIP压缩和解压缩

    字符串压缩

    字符串压缩的主要目的是通过消除数据中的冗余来降低存储需求,这在处理大量文本数据时尤其有用。在编程领域,有许多不同的压缩算法,如霍夫曼编码、LZ77、LZ78、DEFLATE(广泛应用于ZIP和GZIP格式)等。 描述中提到...

    字符串压缩与解压

    在IT领域,字符串压缩与解压是数据处理和存储中常见的技术。特别是在处理大量文本信息时,为了节省存储空间和提高传输效率,我们会对字符串进行压缩。本文将深入探讨C#语言中三种实现字符串压缩与解压的方法。 1. *...

    C#中ICSharpCode.SharpZipLib字符串压缩

    对于字符串压缩,SharpZipLib提供了`GZipStream`和`DeflaterStream`类,分别用于GZip和ZIP格式的压缩。这里我们以GZip为例,演示如何压缩和解压缩字符串: ```csharp public static string CompressString(string ...

    Python123之字符串压缩#134865

    字符串压缩的主要目的是通过减少冗余信息来减小文件或数据的大小。它基于数据的统计特性,比如某些字符或模式出现的频率,将频繁出现的元素用更短的编码表示。常见的压缩方法有哈夫曼编码(Huffman Coding)、LZ77...

    string-yasuo.zip_字符串压缩

    在IT领域,字符串压缩是一种常见的数据处理技术,用于减少存储空间的需求,特别是在处理大量文本数据时。...而"string-yasuo.zip_字符串压缩"这个程序,作为对字符串压缩的实现,无疑是IT从业者的一个宝贵工具。

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

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

    pako gzip 压缩和解压缩(支持中文).rar

    例如,要对一个包含中文字符的字符串进行gzip压缩,你可以这样操作: ```javascript var text = "你好,世界!"; var compressed = pako.gzip(text, { to: 'string' }); ``` 这里,`to: 'string'`参数指定我们希望...

    字符串压缩解压缩.rar

    字符串压缩的应用非常广泛,例如在HTTP协议中,服务器和客户端可以通过gzip压缩来减少网页的传输时间;在存档文件格式如.zip和.tar.gz中,ZLIB压缩也被广泛采用。此外,数据库系统可能会对索引和数据进行压缩,以...

    python字符串压缩.pdf

    在Python编程语言中,字符串压缩是一项重要的数据处理技术,它用于减少存储空间需求或在网络传输时减小数据量。Python提供了多种内置库和第三方库来实现字符串的压缩和解压缩功能。以下是关于Python字符串压缩的一些...

    C#自定义字符串压缩和解压缩的方法

    需要注意的是,这个自定义的字符串压缩和解压缩方法使用了GZIP算法,它是一种广泛使用的数据压缩方法。GZIP通常用于文件和网络数据的压缩,但由于它是基于块的压缩,对于小规模的数据(如单个字符串),可能不会达到...

    cpp-smaz小型字符串压缩库

    **cpp-smaz小型字符串压缩库** `cpp-smaz` 是一个基于 `Smaz` 的小型字符串压缩库,专为C++编程语言设计。`Smaz` 是由Paolo Bergantino开发的一个开源压缩算法,它专注于对小字符串进行高效压缩。在处理大量文本...

    pako gzip 压缩和解压缩(支持中文)

    1. **压缩**:使用`pako.gzip()`方法,将未压缩的数据作为输入,它会返回一个已压缩的二进制字符串或Buffer(在Node.js环境下)。例如: ```javascript var input = "这是需要压缩的文本"; var compressed = pako...

    解压Zip字符串(Delphi)

    总的来说,Delphi环境下的gZip字符串解压涉及到了对gZip压缩格式的理解,以及如何在Delphi中利用ZLib库实现解压操作。通过学习提供的源代码和Demo,开发者不仅可以掌握具体的解压技术,还能加深对Delphi编程和库集成...

Global site tag (gtag.js) - Google Analytics