繁体   English   中英

Java | 将数据处理程序写入文件的方法比预期花费更多时间

[英]Java | method to write a datahandler to a file takes more time than expected

我试图通过使用camel并将附件作为DataHandler从MS Exchange中读取邮件。 一个10MB文件大约需要3hrs才能写入该位置。

File outputFile = new File(someDirectory, someFileName);
DataHandler attachment_data = destination1Attachments.get("someFileName.txt"); 

        try (FileOutputStream fos = new FileOutputStream(outputFile)) {
            attachment_data.writeTo(fos);  
        }

我还注意到,有时6到7Mb的文件大约需要2到3分钟,而紧接着又收到另一封邮件所花费的时间比预期的要长。

因为GC?

试图找到确切的根本原因或任何其他方法将数据写入文件。

更新1
如@ user207421在评论中所述,在FileOutputSteam周围使用BufferedOutputStream尝试。 找不到太多变化(仅1秒或更短)。

这可能是由于写入机制的默认实现。

attachment_data.writeTo(fos);  

如果DataHandler.getDataSource()!=null则此理论将起作用

在此方法的实现中,一次读取8个字节并将其写入流中。 读取和写入的数量更多,这可能是导致问题的原因。

尝试从DataHandler.getInputStream上自行读取,然后通过增加从输入流中读取的内容来写入文件。

必须假定该对象已装入内存或writeTo效率很低。 因此,指定DataFlavor并检查attachment_data.getTransferDataFlavors()

DataFlavor flavor = new DataFlavor(InputStream.class, "application/octetstream");
try (InputStream in = (InputStream) attachment_data.getTransferData(flavor)) {

需要一些摆弄。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM