Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/309.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 充气机压缩法_Java - Fatal编程技术网

Java 充气机压缩法

Java 充气机压缩法,java,Java,我有一个压缩文件 使用充气器类,我可以对其进行解压缩,但使用放气器再次压缩时,两个文件不完全相同 我已经尝试将压缩级别更改为最佳 public static String compress(byte[] rawData) { Deflater compressor = new Deflater(); byte[] byteBuffer = new byte[1024]; ByteArrayOutputStream outputStream = new ByteArray

我有一个压缩文件

使用
充气器
类,我可以对其进行解压缩,但使用
放气器
再次压缩时,两个文件不完全相同

我已经尝试将压缩级别更改为最佳

public static String compress(byte[] rawData)
{
    Deflater compressor = new Deflater();

    byte[] byteBuffer = new byte[1024];
    ByteArrayOutputStream outputStream = new ByteArrayOutputStream(
            rawData.length);

    compressor.setInput(rawData);
    compressor.setLevel(Deflater.BEST_COMPRESSION);
    compressor.finish();

    while (!compressor.finished())
    {
        outputStream.write(byteBuffer, 0,
                new Integer(compressor.deflate(byteBuffer)));
    }

    return new String(outputStream.toByteArray());
}
…结果更接近原始结果

这是我的充气机代码:

public static String decompress(byte[] compressed)
        throws DataFormatException
{
    Inflater decompressor = new Inflater();

    byte[] byteBuffer = new byte[1024];
    ByteArrayOutputStream outputStream = new ByteArrayOutputStream(
            compressed.length);

    decompressor.setInput(compressed);

    while (!decompressor.finished())
    {
        outputStream.write(byteBuffer, 0,
                new Integer(decompressor.inflate((byteBuffer))));
    }

    return new String(outputStream.toByteArray());
}

如何确定最初使用了哪些选项来从解压缩的文件重建原始文件?我新压缩的文件不符合要求。

我强烈怀疑您的问题是由以下行引起的:

return new String(outputStream.toByteArray());

String(byte[])
构造函数使用未指定的平台相关字符集将字节转换为字符,该字符集可能会任意损坏二进制数据,因为并非所有可能的字节都对应于有效字符。不能保证
新字符串(someBytes).getBytes()等于
someBytes
。你应该返回字节数组。

出于好奇,你为什么需要这样做?@Boann:我得到了一个压缩文件,其中包含我想要修改和重建的脚本。没有提供详细信息‎@‍user3764804但为什么使用什么精确的压缩器设置才重要,只要它可以由任何兼容的解压器解压?您知道,某些压缩算法会根据外部因素(如CPU利用率或RAM使用率)改变其行为。此外,有些人做得比其他人好(通常是为了权衡上述因素之一)。真正重要的是,它可以被解压缩,并且满足所需的性能要求。@Dark Falcon:当我压缩它时,它不符合要求。但也可以复制相同的压缩。是的!:)转换到字符串混乱的事情,谢谢很多人!文件现在是相同的。