2

複数のメッセージから添付ファイルを取得しようとしているimapimを介して。正常に動作しますが、約20メガバイトの添付ファイルがある場合は、スタックしているように見え、Javaは続行されません。

ここで問題が発生します。添付ファイルのコンテンツを取得して文字列に保存したいのですが、次のようになります。

...
MimeBodyPart attachment = (MimeBodyPart) multipart.getBodyPart(1);  
if(!Part.ATTACHMENT.equalsIgnoreCase(attachment.getDisposition())) {
    log.error("Part is not an attachment!");
} else {
    log.debug("Checking " + localFile.getName() + " with " + attachment.getFileName() + ". Attachment-Size: " + (attachment.getSize()/(1024*1024)) + " mega-bytes.");
    InputStream remoteFileIs = attachment.getInputStream();
    remoteFileContent = IOUtils.toString(remoteFileIs);  //stucked here, when attachment is large
    remoteFileIs.close();
    ...
}
...

これに対する解決策はありますか?

よろしく!

4

1 に答える 1

3

IOUtils.toStringは何をしますか?文字セット情報のないInputStreamを指定しているだけなので、バイトストリームを文字に正しく変換できない可能性があります。そして、それが何をしていても、大きなデータに対しては非効率的に実行している可能性があります。

JavaMailセッションのデバッグをオンにして、添付ファイルをフェッチしているときのプロトコルトレースを確認し、それが本当に「スタック」しているか、単に遅いかを判断できます。

mail.imap.fetchsizeプロパティを設定することにより、IMAPサーバーからのフェッチのバッファサイズを制御することもできます。

しかし、おそらく、文字列に20MBの添付ファイルが本当に必要かどうかを疑問視する必要があります。あなたがそれを手に入れたら、あなたはその文字列をどうするつもりですか?

于 2013-02-12T19:49:47.407 に答える