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