使用 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 编码!你需要得到澄清。
我需要将文件压缩成我国税务监管实体要求的特定格式,并且必须以 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 编码!你需要得到澄清。