日日操夜夜添-日日操影院-日日草夜夜操-日日干干-精品一区二区三区波多野结衣-精品一区二区三区高清免费不卡

公告:魔扣目錄網為廣大站長提供免費收錄網站服務,提交前請做好本站友鏈:【 網站目錄:http://www.ylptlb.cn 】, 免友鏈快審服務(50元/站),

點擊這里在線咨詢客服
新站提交
  • 網站:51998
  • 待審:31
  • 小程序:12
  • 文章:1030137
  • 會員:747

本文介紹了在將大量文件數據寫入XML時減少內存(RAM)消耗的高效方法的處理方法,對大家解決問題具有一定的參考價值,需要的朋友們下面隨著小編來一起學習吧!

問題描述

我必須將7個列表寫入XML文件,每個列表的大小為1 GB到5 GB。

預期輸出的XML文件如下:

<doc>
    <items1>
        <itemA>..</itemA>
        ..
    </items1>

    <items2>
        <itemB>..</itemB>
        ..
    </items2>

    <items3>
        <itemC>..</itemC>
        ..
    </items3>
    .
    .
    .
    <items7>
        <itemG>..</itemG>
        ..
    </items7>
</doc>  

Java對象如下:

List<ItemA> items1 = new List<>(); // 1GB-5GB
List<ItemB> items2 = new List<>(); // 1GB-5GB
List<ItemC> items3 = new List<>(); // 1GB-5GB
List<ItemD> items4 = new List<>(); // 1GB-5GB
List<ItemE> items5 = new List<>(); // 1GB-5GB
List<ItemF> items6 = new List<>(); // 1GB-5GB
List<ItemG> items7 = new List<>(); // 1GB-5GB

將所有列表包裝到單個對象(目錄)中到一個Java對象中,并且一次封送消耗大量內存,而且每次當列表大小增加時,我們都必須縮放我們的底層。代碼如下:

JAXBContext.newInstance("ta").createMarshaller().marshal(new ObjectFactory().createCatalogue(catalogue), new FileOutputStream(fileName));

此處的Catalogue是一個包含所有七個列表的Java對象。

有沒有什么聰明的方法可以通過以塊為單位寫入數據來減少內存消耗。為此,我研究了stax,但找不到寫入數據列表的方法。

在Java中,有沒有什么方法可以高效地將高達20 GB的數據寫入到XML中,而無需在基礎設施上擴展RAM?

我們希望分別寫入每個列表,并且在寫入下一個列表時不應將以前寫入的文件加載到堆中。

XMLX

使用StAX很可能是最好的方法,不僅因為您不必將整個推薦答案文檔保存在內存中,而且還因為您也不必將所有都保存在內存中。不知道您在哪里尋找StAX的寫作,但我在The Java EE 5 Tutorial中找到了以下內容:

下面的示例摘自StAX規范,說明如何
實例化輸出工廠、創建編寫器并編寫XML輸出:

XMLOutputFactory output = XMLOutputFactory.newInstance();
XMLStreamWriter writer = output.createXMLStreamWriter( ... );
writer.writeStartDocument(); 
writer.setPrefix("c","http://c");
writer.setDefaultNamespace("http://c");
writer.writeStartElement("http://c","a");
writer.writeAttribute("b","blah");
writer.writeNamespace("c","http://c");
writer.writeDefaultNamespace("http://c");
writer.setPrefix("d","http://c");
writer.writeEmptyElement("http://c","d");
writer.writeAttribute("http://c","chris","fry");
writer.writeNamespace("d","http://c"); 
writer.writeCharacters("Jean Arp"); 
writer.writeEndElement(); 
writer.flush(); 

此代碼生成以下XML(換行不規范):

<?xml version=’1.0’ encoding=’utf-8’?> 
<a b="blah" xmlns:c="http://c" xmlns="http://c">
  <d:d d:chris="fry" xmlns:d="http://c"/>
  Jean Arp
</a> 

編輯:我還注意到有一個關于generating XML with StAX in the link you posted的部分。還要注意,編寫列表并沒有什么特別之處,您只需迭代列表并為每個條目編寫一個標記即可。大概是這樣的:

XMLStreamWriter writer = ...;
writer.writeStartDocument();
writer.writeStartElement("doc");

// Write the first list:
writer.writeStartElement("items1");
for (ItemA e: items1) {
  writer.writeStartElement("itemA");
  // TODO: Write attributes, sub-elements, text or whatever is needed
  writer.writeEndElement();
});
writer.writeEndElement();

// TODO: Write items2, items3, ..., items7 in the same fashion as items1

// Close document
writer.writeEndElement();
writer.writeEndDocument();

XMLStreamWriter是低級的,這意味著除了將XML寫入流之外,它不會為您做更多事情,但它并不復雜。因此,與使用JAXB相比,您最終可能需要更多的代碼行,但是您必須編寫的代碼不會特別難寫。

這篇關于在將大量文件數據寫入XML時減少內存(RAM)消耗的高效方法的文章就介紹到這了,希望我們推薦的答案對大家有所幫助,

分享到:
標簽:內存 寫入 減少 文件 方法 消耗 高效
用戶無頭像

網友整理

注冊時間:

網站:5 個   小程序:0 個  文章:12 篇

  • 51998

    網站

  • 12

    小程序

  • 1030137

    文章

  • 747

    會員

趕快注冊賬號,推廣您的網站吧!
最新入駐小程序

數獨大挑戰2018-06-03

數獨一種數學游戲,玩家需要根據9

答題星2018-06-03

您可以通過答題星輕松地創建試卷

全階人生考試2018-06-03

各種考試題,題庫,初中,高中,大學四六

運動步數有氧達人2018-06-03

記錄運動步數,積累氧氣值。還可偷

每日養生app2018-06-03

每日養生,天天健康

體育訓練成績評定2018-06-03

通用課目體育訓練成績評定