gpt4 book ai didi

java - 使用 GZIPOutputStream 时的当前文件大小

转载 作者:行者123 更新时间:2023-11-30 07:07:14 30 4
gpt4 key购买 nike

我正在使用 GZIPOutputStream 以异步方式将压缩数据写入磁盘

我想知道已经写入的数据大小,以便在达到限制后关闭文件

ByteBuffer src;
//..
//data added to src here
//..
File theFile = new File("hello.gz");
FileOutputStream fos = new FileOutputStream(theFile);
GZIPOutputStream zs = new GZIPOutputStream(fos);
BufferedWriter zipwriter = new BufferedWriter(new OutputStreamWriter(zs, "UTF-8"));

(while_more_data)
{
zipwriter.write(src.get());
// check current file size here and close file if limit is reached
}

最佳答案

将您的 FileOutputStream 包装到另一个能够计算写入字节数的输出流中,例如 CountingOutputStream第三方图书馆提供Jakarta Commons IO , 或 CountingOutputStream来自 Guava .

实现可能是这样的:

ByteBuffer src;
//..
//data added to src here
//..
File theFile = new File("hello.gz");
try (FileOutputStream fos = new FileOutputStream(theFile);
CountingOutputStream cos = new CountingOutputStream(fos);
GZIPOutputStream zs = new GZIPOutputStream(cos);
BufferedWriter zipwriter = new BufferedWriter(new OutputStreamWriter(zs, "UTF-8"))) {

(while_more_data) {
zipwriter.write(src.get());
zipwriter.flush(); // make sure, data passes cos
if (cos.getByteCount() >= limit) {
// limit reached
}
}
}

关于java - 使用 GZIPOutputStream 时的当前文件大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25034996/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com