是否有可能顯示序列化/反序列化過程的進度?因爲我有大量的對象(200.000),需要10到20秒,所以我想向用戶顯示進度條。還是有更好的解決方案/庫?XStream Java顯示進度
回答
您可以創建自定義轉換器...
我假設你有至極駐留在數據收集...
ArrayList<String> stringList = new ArrayList<String>(); //example list
stringList.add("abc"); //example data
stringList.add("abc"); //example data
stringList.add("abc"); //example data
stringList.add("abc"); //example data
XStream xstream = new XStream();
xstream.alias("string", String.class); //example aliasing
Mapper mapper = xstream.getMapper();
CollectionConverter aColCon = new CollectionConverter(mapper) {
@Override
protected void writeItem(Object item, MarshallingContext context, HierarchicalStreamWriter writer){
super.writeItem(item, context, writer);
System.out.println("write object item"+item);
//TODO your progress bar here!
}
};
xstream.registerConverter(aColCon);
String asXml = xstream.toXML(stringList);
System.out.println(asXml);
這是輸出:
write object itemabc
write object itemabc
write object itemabc
write object itemabc
<list>
<string>abc</string>
<string>abc</string>
<string>abc</string>
<string>abc</string>
</list>
謝謝,它的工作原理。稍後我會發布我的解決方案; – schnawel007 2014-09-02 13:24:42
我很高興看到你的產品! – 2014-09-02 13:33:32
在這裏我的解決方案:https://github.com/schnawel007/ExtendedXStream/tree/master/ExtendedXStream/src/de/joshuaschnabel/extendedxstream – schnawel007 2014-09-06 14:51:33
或你可以擴展HierarchicalStreamWriter,並添加了一些進展信息startNode
@XStreamAlias("entity")
private static class Entity {
String foo;
String bar;
}
private static class ProgressIndicationWriter extends PrettyPrintWriter {
public ProgressIndicationWriter(Writer writer, NameCoder nameCoder) {
super(writer, nameCoder);
}
@Override
public void startNode(String name) {
System.out.print("writing node " + name + ".. ");
super.startNode(name);
System.out.println("OK");
}
}
private static class ProgressIndicationDriver extends XppDriver {
@Override
public HierarchicalStreamWriter createWriter(Writer out) {
return new ProgressIndicationWriter(out, getNameCoder());
}
}
public static void main(String[] args) {
final XStream xstream = new XStream(new ProgressIndicationDriver());
xstream.autodetectAnnotations(true);
final Entity myEntity = new Entity();
myEntity.foo = "Lorem";
myEntity.bar = "Ipsum";
final String xml = xstream.toXML(myEntity);
System.out.println();
System.out.println(xml);
}
,輸出是
writing node entity.. OK
writing node foo.. OK
writing node bar.. OK
<entity>
<foo>Lorem</foo>
<bar>Ipsum</bar>
</entity>
這應該是比編寫自定義轉換器的方法更通用。
我的最終解決方案:https://github.com/schnawel007/ExtendedXStream – schnawel007 2014-09-07 18:01:15
- 1. 顯示進度條
- 2. 進度條未顯示進度條
- 3. 如何防止XStream顯示class =「string」?
- 4. DownloadStringAysnc - 不顯示進度
- 5. NSProgressIndicator沒有顯示進度
- 6. 顯示當前進度
- 7. 顯示Eclipse mini進度條?
- 8. DotNetZip - 顯示提取進度?
- 9. 顯示上傳進度
- 10. NSImage中initWithContentsOfFile:顯示進度
- 11. 進度微調不顯示
- 12. WPF進度條未顯示
- 13. 顯示javascript執行進度
- 14. 如何顯示sftp進度
- 15. 進度條不顯示
- 16. 顯示十進制度
- 17. QProgressBar沒有顯示進度?
- 18. Primefaces嚮導顯示進度
- 19. 進度條不顯示
- 20. 顯示服務器進度
- 21. Android:顯示進度條
- 22. UIProgressView不顯示進度
- 23. 顯示進度條問題
- 24. 時顯示進度環
- 25. 在NSSearchField內顯示進度指示器
- 26. javafx:進度條顯示進程的進度?
- 27. 真的顯示java輸出流的進度和超時
- 28. 如何在java中顯示工作但虛擬的進度條
- 29. XStream的XML和Java對象
- 30. WPF進度條不顯示正確的進度
當你創建一個字符串(String xml = xstream.toXML())時,你是否有時間問題,或者當你將字符串寫入文件時會發生這種情況嗎? – 2014-09-02 11:07:58
寫字符串,保存到光盤真的很快,它需要不到3秒(SSD) – schnawel007 2014-09-02 11:52:50
看我的答案 - 我想你有一個列表或一棵樹,因此你知道你的'收藏'內有多少物品。 ..然後你可以增加計數器,每當一個項目的工作(Converter.WriteItem(..))...我不認爲你會有更新你的進度條的問題,但讓我知道這個解決方案是否工作你... – 2014-09-02 11:55:11