2012-03-28 42 views
2

我必須通過套接字發送大量xml數據。 xml文件的實施例 (服務器側生成這樣的文件):如何通過套接字發送大型xml文件

<message> 
<data> 
    <param1>12345</param1> 
    <param2>234</param2> 
</data> 
... 
<data> 
    <param1>321</param1> 
    <param2>34234</param2> 
</data> 
</message> 

然後客戶端接收這樣的數據。 客戶端必須解析此文件並將參數插入到db。

客戶端接收這部分數據(字節大小):

byte[] receivedData = new byte[1024]; 
int receivedBytesLen = streamFromServer.read(receivedData); 

我如何處理這些數據?

  1. 例如,如果我將所有文件數據讀取到客戶端的變量然後進行處理。我認爲這不好 - 可能是問題(大量數據)。
  2. 將所有數據寫入臨時文件然後進行處理?創建文件,刪除...
  3. 同時讀取和處理。但是XML沒有滿。
  4. 還有別的嗎?
+1

你看過在Stream上使用XmlReader嗎? – JamieSee 2012-03-28 16:22:23

+0

感謝您的回覆 – Elena 2012-04-06 15:19:58

回答

2

幾另一個例子多年前,我爲一家廣播公司開發了一種解決方案,該廣播公司正在使用運動導線服務,這種方式完全正常。

從他們的一些技巧:

  1. 確保每封郵件都有一個唯一的標識符。它可以像文檔元素中的guid屬性一樣簡單。
  2. 多次發送消息(除非這是點對點,並且您的解決方案中內置了確認)。客戶端應該維護成功處理消息的唯一標識符的散列表,並忽略它已處理的重複項。
  3. 讓我們的信息保持在最低點。你真的需要所有的「數據」節點在一個消息?你不能把它們作爲單獨的消息發送嗎?
  4. 用不可用的XML字符分隔您的消息。 CR's和LF's將不起作用。該服務使用{0x02}字節分隔消息。在客戶端使用它來查找XML文檔之間的分隔點。
+0

非常感謝。多次發送消息 - 我可以。在客戶端,我可以藉助不可用的xml字符處理數據。 – Elena 2012-03-29 14:49:39

+0

@Elena - 很高興幫助。祝你的項目好運。 – 2012-03-29 16:17:01