将EmailMessage转换为ByteArrayOutputStream

时间:2013-10-31 10:50:08

标签: java stream bytearray

我使用Java EWS API(EWS - Exchange Web服务)从Exchange服务器获取电子邮件并将其存储在专有CMS中。我收到消息的类型是microsoft.exchange.webservices.data.EmailMessage - EWS API提供的类。 CMS API需要ByteArrayOutputStream个对象作为其方法的参数。

所以我想将EmailMessage对象转换为ByteArrayOutputStream。我看到this thread并尝试过类似的内容:( item下面的EmailMessage类型)

ByteArrayOutputStream b = new ByteArrayOutputStream();
try
{
    ObjectOutputStream o  = new ObjectOutputStream(b);
    o.writeObject((Object)item);
}
catch(IOException ioe)   
{
    ioe.printStackTrace(); 
}

但我得到了

java.io.NotSerializableException: microsoft.exchange.webservices.data.EmailMessage
     at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1180)   
     at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:346)

我可以使用EmailMessage.eml格式保存这些FileOutputStream个对象,但是现在我无法找到将它们转换为ByteArrayOutputStream的方法。 那么有没有办法将FileOutputStream转换为ByteArrayOutputStream或直接从EmailMessage转换为ByteArrayOutputStream

1 个答案:

答案 0 :(得分:0)

您收到此异常是因为(Object)item的类没有实现Serializable接口。来自java doc writeObject(Object obj)

  

对于OutputStream和不应序列化的类的问题,会抛出异常。所有异常对OutputStream都是致命的,而OutputStream处于不确定状态,并且调用者可以忽略或恢复流状态。