各位大人:
下面的函数,我对一个有数据较大的XML进行解析后 ,如果调用encoder.close();比不调用多花了15秒的时间,是什么原因呢?
public static String encoderObject(final Object obj )
{

ByteArrayOutputStream out = new ByteArrayOutputStream(1024);
XMLEncoder encoder = new XMLEncoder(new BufferedOutputStream(out));
encoder.setPersistenceDelegate(
java.sql.Date.class,
new Java_sql_Date_PersistenceDelegate());





try
{
Field f = encoder.getClass().getDeclaredField("encoding");
if (f != null
&& java.lang.reflect.Modifier.isStatic(f.getModifiers()))
{
f.setAccessible(true);
f.set(encoder, "utf-8");
};


encoder.writeObject(obj);
encoder.close();
(); 

} catch (Exception e)
{
e.printStackTrace();
}
 
String sReturn="";

 
  try {
sReturn = out.toString("utf-8");
} catch (UnsupportedEncodingException e1) {
 
e1.printStackTrace();
}
 
 
return sReturn;
  }

解决方案 »

  1.   

    void close() 
              此方法调用 flush,写入结束后文,然后关闭与此流有关的输出流。 
     void flush() 
              如果还没有写出导言,那么此方法将写出与 XML 编码有关的导言,并随后写出从最后一次调用 flush 以来写入流中的所有值。 
    可能flush()中做了不少消费资源的动作,看看任务管理器cpu是不是满负荷
      

  2.   

    那我是否能够不调用  close()呢?
    也不调用flush(),因为我并不要写到本地啊
      

  3.   

    可以不关,局部变量函数结果后,垃圾回收器会自动回收。如果cpu占用率不高,也可以新开一个线程来处理 close()
      

  4.   

    为什么XMLEncoder 类序列化这么慢呢
      

  5.   

    它需要将xml文档格式化为字付串,看你xml大小。不过有时候是IO操作的原因,比如网络IO,硬盘被其它程序使用时。看看CPU使用率就知道是不是IO的原因
      

  6.   

    没碰过这种情况
    如果close不行
    可不可以用gc来回收