[英]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.