读书人

为什么小弟我执行XMLEncoder的close的

发布时间: 2012-02-09 18:22:27 作者: rapoo

为什么我执行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来回收

读书人网 >J2SE开发

热点推荐