compression - 将 DeflaterOutputStream 转换为 ByteArrayOutPutStream
问题描述
我在这里尝试发送一封带有作为参数数据的函数的电子邮件。NSData 是 WebObject Framework 提供的一种数据类型。无论如何,我遇到的第一个问题是数据(在发送电子邮件时转换为文件)太大了。所以我有了压缩数据的想法。
我发现了几种压缩数据的方法,尤其是使用 DeflaterOutputStream。问题是我需要将我的 DeflaterOutputstream 类型的压缩数据转换为 byteArray 以最终将其转换为等待作为我的电子邮件函数参数的 NSData 类型。
但我找不到任何可以让我将 DeflaterOutPutStream 转换为 byteArray 的东西。
如果有人可以向我解释 deflaterOutPutStream 的真正工作原理以及如何将其转换为 byteArray 以处理我的压缩数据,那就太好了!
下面有我的代码可以帮助您理解我的问题。
pdf_encode = new NSData();
pdf_encode = compress(pdf_encode);
HtmlEmailSender.sendHtmlEmailWithDefaultParamsAndPJ("some_email_address", "some_email_address", "some_email_address", subject, message, this.dossier.get_file_name(), pdf_encode);
public NSData compress(NSData pdfData) throws IOException {
DeflaterOutputStream compresser = null;
try {
File pdf1 = Page_Annuaire_Groupe_Ctrl.byteToFile(pdfData, this.dossier.get_file_name(), ".pdf");
File pdf2 = Page_Annuaire_Groupe_Ctrl.byteToFile(pdfData, this.dossier.get_file_name(), ".pdf");
pdf1.setReadable(true);
FileInputStream inputStream = new FileInputStream(pdf1.getAbsolutePath());
FileOutputStream outputStream = new FileOutputStream(pdf2.getAbsolutePath());
compresser = new DeflaterOutputStream(outputStream);
int contents;
while ((contents=inputStream.read())!=-1){
compresser.write(contents);
}
//has to be filled with compresser content
byte[] pdfBytes
compresser.close();
pdfData = new NSData(pdfBytes);
} catch (FileNotFoundException e) {
e.printStackTrace();
}
return pdfData;
}
解决方案
推荐阅读
- mysql - 如何创建查看多个表的“插入前”触发器
- flutter - Flutter bool name = String 可能吗?
- memory-leaks - F# 中的计算是否在完成时调用 Dispose()?
- ios - 如何自定义 UICollectionView Cell 以显示图像网格,如附件所示?
- javascript - 按照用户使用 Java Script 将鼠标悬停在它们上的顺序打印消失的悬停数字
- html - css 过渡在我的卡 div 上无法正常工作
- json - 如何使用 Ktor 解析响应
- r - 为什么使用 websocket(路透社)在 R 中出现错误消息?
- node.js - Mongoose:特定用户查询的所有点的总和
- shell - 显示服务器协议的任务是什么?