使用 GZIP 将 Java 文件压缩转换为 Python3

Translate Java file compression to Python3 with GZIP

我需要将文件压缩成我国税务监管实体要求的特定格式,并且必须以 base64 编码发送。

我在 Python3 上工作并尝试使用以下代码进行压缩:

import gzip

# Work file generated before and stored in BytesBuffer
my_file = bytes_buffer.getvalue()

def compress(work_file):
   encoded_work_file = base64.b64encode(work_file)
   compressed_work_file = gzip.compress(encoded_work_file )
   return base64.b64encode(compressed_work_file )
   
compress(my_file)

现在税务实体 returns 关于未知压缩格式的错误消息。 幸运的是,他们为我们提供了以下 Java 示例代码:

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.zip.GZIPInputStream;
import java.util.zip.GZIPOutputStream;

public class DemoGZIP {

    private final byte[] BUFFER = new byte[1024];

    /**
     * @param work_file File to compress
     *      The file is compressed over the original file name with the extension .zip
     * @return boolean 
     *      TRUE success
     *      FALSE failure
     */
    public boolean compress(File work_file ) {                
        try (GZIPOutputStream  out = new GZIPOutputStream (new FileOutputStream(work_file .getAbsolutePath() + ".zip"));
                FileInputStream in = new FileInputStream(work_file )) {
            int len;
            while ((len = in.read(BUFFER)) != -1) {
                out.write(BUFFER, 0, len);
            }
            out.close();
        } catch (IOException ex) {
            System.err.println(ex.getMessage());
            return false;
        }
        return true;
    }

问题是我没有任何在 Java 上工作的经验,也不理解所提供的大部分代码。

有人可以帮我调整我的代码来执行 python 中提供的代码吗?

如评论中所述,Java 代码不进行 Base64 编码,并且错误地命名了生成的文件。它绝对不是 zip 文件,而是 gzip 文件。后缀应为“.gz”。尽管我怀疑这个名称对您的税务机构是否重要。

更重要的是,您使用 Base64 编码两次。根据您的描述,您应该只在 gzip 压缩后执行一次。从 Java 代码来看,根本不应该进行 Base64 编码!你需要得到澄清。