簡體   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