javamail: почему текстовое / простое вложение возвращается методом getContent, а не InputStream? - PullRequest
0 голосов
/ 27 июля 2011

При попытке загрузить почту с вложениями из gmail моя тестовая почта содержит текстовый файл в качестве вложения.

Часть вложения возвращает текстовый тип содержимого вложения и даже имя файла правильно.Но условие цикла над вложением InputStream никогда не является ненулевым.

После небольшого количества проб и ошибок выяснилось, что контент для text / plain доступен с использованием метода getContent для этой части (в приведенном ниже примере ввод вызова

    att_mbp.getContent() 

содержимое в прикрепленном текстовом файле)

if (BodyPart.ATTACHMENT.equalsIgnoreCase(att_mbp.getDisposition())) {

                att_mbp.getContentType();

                // process each attachment
                // read the filename
                file = att_mbp.getFileName();

                InputStream stream = att_mbp.getInputStream();

                BufferedInputStream br = new BufferedInputStream(stream);
                BufferedOutputStream bout = new BufferedOutputStream(new FileOutputStream(file));

                while (br.available() > 0) {
                   // this loop is never executed for text/plain
                    bout.write(br.read());
                }
                bout.flush();
                bout.close();

}

Мой вопрос: почему текстовое / простое вложение доступно только из getContent (), а не из присоединенного экземпляра InputStream тоже?

1 Ответ

0 голосов
/ 28 июля 2011

Хорошо.Я наконец-то понял.

Вызов функции available () всегда возвращает 0. Код работал, когда я модифицировал его следующим образом

int dataByte;

while( ( dataByte = br.read() ) > 0 ){
  bout.write( dataByte );
}

Согласно javadoc, потомки InputStream должны переопределять доступные.Похоже, это не тот случай.

...