首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Java IOException在XMLEncoder刷新中的应用

Java IOException在XMLEncoder刷新中的应用
EN

Stack Overflow用户
提问于 2013-10-16 00:51:48
回答 1查看 274关注 0票数 0

我最近升级到Java 7,我注意到XML序列化中有一个奇怪的问题。基本上,我有一个测试实用工具类,它使用XML编码器将对象转换为XML。

见下面的示例代码:

代码语言:javascript
复制
public static String toXML(Object obj) {
    String retval = null;

    if(obj != null) {
        XMLEncoder encoder = null;
        ByteArrayOutputStream bos;

        try {
            bos = new ByteArrayOutputStream();
            encoder = new XMLEncoder(bos);
            encoder.writeObject(obj);
            encoder.close();
            byte[] bytes = bos.toByteArray();
            if(bytes != null) {
                retval = new String(bytes);
            }

        } catch(Exception e) {
            e.printStackTrace();

        } finally {
            if(encoder != null) {
                encoder.close();
            }
        }
    }
    return retval;
}

它在Java1.6中运行良好,但是自从我升级到Java1.7之后,我注意到XML编码器操作会在日志中抛出一个IOException:

代码语言:javascript
复制
java.io.IOException: Stream closed
at sun.nio.cs.StreamEncoder.ensureOpen(StreamEncoder.java:45)
at sun.nio.cs.StreamEncoder.flush(StreamEncoder.java:140)
at java.io.OutputStreamWriter.flush(OutputStreamWriter.java:229)
at java.beans.XMLEncoder.flush(XMLEncoder.java:497)
at java.beans.XMLEncoder.close(XMLEncoder.java:530)
at com.mytestcode.server.common.util.TestSerializer.toXML(TestSerializer.java:87)

我查看了XMLEncoder代码,发现StreamEncoder.ensureOpen对isOpen进行了检查,这似乎是错误的。

This问题看起来很相似,尽管它没有使用Java1.7XML编码器。我还没有在XML编码器或一般的方法中看到这个问题,我是否可以在代码中修复一些东西,或者这看起来更顺流呢?我遗漏了什么?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-12-19 22:52:22

我终于能弄明白这个问题了。问题在于Java 6到7 upgarde。

XMLEncoder显示,在Java6中,XML编码器直接工作在构造函数中传递的ByteArrayOutputStream上,而在Java 7中,XMLEncoder将StreamEncoder封装在传入构造函数的ByteArrayOutputStream周围。

(第289项)

/repository.grepcode.com/java/root/jdk/openjdk/7-b147/java/beans/XMLEncoder.java/?v=diff&id2=6-b14

当调用ByteArrayOutputStream.close() (参见Javadoc)时,如果流已经关闭,则StreamEncoder.close() (参见Javadoc)抛出一个可恢复的IOException。

获取默认ExceptionListener并将此异常记录在日志中。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19393542

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档