J'essaie d'obtenir la taille d'un mimemessage. La méthode getise () renvoie simplement -1.
Ceci est mon code: P>
ByteArrayOutputStream os = new ByteArrayOutputStream(); m.writeTo(os); int bytes = os.size();
3 Réponses :
essayez d'appeler mp.getsize () pour voir ce qu'il revient, Mimemessage l'appelle sur le député uniquement. Aussi de MIME Message API P>
Renvoie la taille du contenu de cette partie d'octets. Retour -1 si le la taille ne peut pas être déterminée. p> blockQuote>
Dès maintenant, vous n'avez passé aucun contenu sur le message, cela pourrait être la raison de -1 valeur de retour. P>
Que voulez-vous dire que je n'ai pas passé de contenu? J'ai exécuté m.setContent (MP)
bodypart.getsize () renvoie -1
Ajoutez du contenu au corps .. doit obtenir la taille approximative après cela.
Si quelqu'un examine toujours cela, Mimemessage et MIMEBODYPART fonctionnent () sur l'objet de contenu ou le flux de contenu. Celles-ci sont définies par les constructeurs, mais pas par setContent (), donc même si GetContent () renvoie des données, GetSize () retournera à tort -1. Utilisez un débogueur pour traquer les données internes, car il peut être stocké à plusieurs endroits sous le DataHandler. Par exemple, les pièces jointes peuvent être mesurées en appelant disponible () sur le flux d'entrée de DataSource de DataHandler.
Une solution plus efficace, mais nécessitant une bibliothèque externe, est la suivante:
public static long getReliableSize(MimeMessage m) throws IOException, MessagingException { try (CountingOutputStream out = new CountingOutputStream(new NullOutputStream())) { m.writeTo(out); return out.getByteCount(); } }
Je vois une énorme différence dans les octets compter de l'Apache lib quand je le comparais à Java Mime Message.Getsize (). Avez-vous des informations sur cela?
La solution fournie avec Apache Commons est bonne, mais NullOutPutStream () constructeur est maintenant obsolète. Utilisez plutôt le singleton à la place:
CountingOutputStream out = new CountingOutputStream(NullOutputStream.NULL_OUTPUT_STREAM);