日期:2014-05-20  浏览次数:20982 次

为什么我执行XMLEncoder的close的时候会这么慢呢
各位大人:
下面的函数,我对一个有数据较大的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;
  }

------解决方案--------------------
void close()
此方法调用 flush,写入结束后文,然后关闭与此流有关的输出流。
void flush()
如果还没有写出导言,那么此方法将写出与 XML 编码有关的导言,并随后写出从最后一次调用 flush 以来写入流中的所有值。


可能flush()中做了不少消费资源的动作,看看任务管理器cpu是不是满负荷
------解决方案--------------------
可以不关,局部变量函数结果后,垃圾回收器会自动回收。

如果cpu占用率不高,也可以新开一个线程来处理 close()
------解决方案--------------------
没碰过这种情况
如果close不行
可不可以用gc来回收