【JAVA输入输出流】合成图反而小于原始图,求解?

发布于 2022-09-01 17:57:39 字数 647 浏览 22 评论 0

smallFile和originalFile分别代表两个图片的输入流;将这两个图片的字节读取出来,写进mergingFile,代码如下:

FileOutputStream mergingFile = new FileOutputStream(mFilePath);
byte[] bytes = new byte[1024];        
int i;
while ((i = originalFile.read(bytes)) != -1) {
    mergingFile.write(bytes, 0, i);
}
bytes = new byte[1024];
while ((i = smallFile.read(bytes)) != -1) {
    mergingFile.write(bytes, 0, i);
}

假设Size(图片)函数功能为计算图片的大小;那么Size(merginFile)一般大于Size(smallFile)与Size(originalFile)中的任意一个,并且小于后两者之和(两个文件占位符变成了一个,我的理解)。

然而,在大量的测试中,有意外发生,有些Size(merginFile)要小于Size(smallFile)以及Size(originalFile)中的任意一个,不理解!

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

本王不退位尔等都是臣 2022-09-08 17:57:39

最可能的情况是Size()这个方法有问题,计算的不对。也有可能是采用了多线程输出到mergingFile产生的BUG,需要具体调试。

你可以首先大量测试一下,执行完成后mergingFile输出的字节数与smallFile,originalFile的输入字节数之和对比,看看是不是相等。如果相等就是Size()的问题,如果不相等看看mergingFile这个输出流里是否有字节丢失或者覆盖情况。

锦欢 2022-09-08 17:57:39

1)你说2个图片文件可以这样直接合并成1个文件并保证格式正确?
2)生成的文件是不是有压缩算法在里面呢,例如jpeg,jpg

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文