各位大人:
下面的函数,我对一个有数据较大的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来回收