首页 > 解决方案 > 将 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;
}

标签: compressiongzipnsdataoutputstreamdeflate

解决方案


推荐阅读