<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    Java, Only Java!

    統計

    留言簿(20)

    積分與排名

    好友空間

    文檔技巧

    閱讀排行榜

    評論排行榜

    Apusic對XML文件處理之分析(轉-請作者與我聯系)

    1 ?????????????? 前言

    本文闡述了 Apusic XML 文件處理的詳細分析,及其現有情況下 Apusic XML 文件解析存在的問題。

    2 ?????????????? Apusic 如何處理 XML 文件

    Apusic 服務器對于 XML 文件解析應該分為兩種情況:一種 Apusic 需要加載的 XML 文件。如 :Apusic 的配置文件, J2EE 應用的 web.xml,application.xml 文件等。另外一種是用戶代碼中使用 DocumentBuilderFactory SAXParserFactory 來解析自己的 XML 文件。對于上面兩種情況的 XML 文件, Apusic 是予以不同處理的。以下對此做具體說明。

    2.1 ???? 解析 Apusic 的配置文件及其 J2EE 應用的 web.xml,application.xml…etc

    對于這一塊的解析,我們現在是采用自己的 XML 解析器來實現的,我們自己的 XML 解析器就是 com.apusic.xml.parsers com.apusic.xml.reader 下的相關類來處理的,和朱華明討論過,我們對于上述文件采用自己的解析器處理是存在優勢的。因為我們對這些文件的結構很了解。效率應該會高于任何第三方的 XML 解析器。但是我們的解析器可能也會存在一些不足的地方,對于一些復雜的 XML 結構的處理可能會存在問題。由于考慮到效率問題,所以這一塊應該不需要使用第三方的 XML 解析器,還是使用我們自己的解析器為好。

    2.2 ???? 用戶代碼中解析自己的 XML 文件

    用戶應用程序使用 DocumentBuilderFactory, SAXParserFactory 對自己的 XML 解析時,由于我們在 Apusic.jar 中,對 META-INF/service/ 文件夾下設置了 javax.xml.parsers.DocumentBuilderFactory , javax.xml.parsers.SAXParserFactory 兩個屬性的值,并指向了 Xerces, 所以用戶在解析 XML 時,缺省情況下使用的就是 Xerces API 進行操作的。因此這一塊應該是不會存在問題。

    至于設置此屬性后是如何利用 Xerces API 進行解析 XML 的原理,當你閱讀了 Java 相關源代碼后就可以明白。具體可以閱讀 javax.xml.parsers 包下的 DocumentBuilderFactory.class,SAXParserFactory.class 類的 newInstance 方法。

    3 ?????????????? 現存問題分析

    現在我們會遇到修改 Apusic 配置文件后, Apusic 無法啟動的情況。這種情況主要是因為我們使用了自己的 XML 解析器。而我們的解析器在處理 UTF-8 編碼文件時存在問題,因為文本文件在文件的頭部存在 BOM? (Byte Order Mark) 標識 , 而這個 BOM 標識是用來表示文件的字節順序。對于不同編碼格式的文件存在不同的 BOM 標識 , 文件的 BOM 標識規范可以參考下表(表 1 ),由于 UTF-8 文件不存在字節順序的問題,所以這個文件 BOM 標識在 UTF-8 編碼方式下是可有可無的。而當我們修改配置文件并保存后,如果存在 BOM 標識,我們的解析器就會出錯,不存在 BOM 標識時,我們的解析器就能夠正確工作。所以我們需要在解析 UTF-8 的時候,判斷頭部是否包含 UTF-8 BOM 標識,如果有就需要跳過去。代碼修改主要是在 XmlReader.java 文件中做如下處理:

    //skip UTF-8 BOM (byte order mark)

    if (count >= 3 && pos == 0){

    if (buffer[0] == (byte)0xEF &&

    buffer[1] == (byte)0xBB &&

    buffer[2] == (byte)0xBF){

    pos += 3;

    }

    }

    ?

    UTF-8

    EF BB BF

    UTF-16 Big Endian

    FE FF

    UTF-16 Little Endian

    FF FE

    UTF-32 Big Endian

    00 00 FE FF

    UTF-32 Little Endian

    FF FE 00 00

    ?

    ( 1)

    ?

    為什么我們對 UTF-16,UTF-32 等編碼方式文件存在 BOM 標識時沒有問題呢?其實這個問題應該是 Java 的一個 bug Java 的文本流在處理其他編碼方式的時候能夠很好的處理這個 BOM 標識,但是對于 UTF-8 編碼時不能夠正確處理。該 bug 可以參考以下地址:

    http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=4508058

    ?

    posted on 2008-03-06 21:19 zYx.Tom 閱讀(997) 評論(2)  編輯  收藏

    評論

    # re: Apusic對XML文件處理之分析(轉-請作者與我聯系) 2008-03-07 09:53 dennis

    blogjava成了廣告宣傳地和轉帖集中地了?  回復  更多評論   

    # re: Apusic對XML文件處理之分析(轉-請作者與我聯系) 2008-03-07 11:06 朱遠翔-Apusic技術顧問

    @dennis
    感謝你的批評,我主要把這里做為Apusic相關技術的介紹地,不管是誰寫的,只要對大家有幫助我就轉過來了,如果作者不同意或者網站不允許,我會將他們取下來。  回復  更多評論   


    只有注冊用戶登錄后才能發表評論。


    網站導航:
     
    主站蜘蛛池模板: 91免费精品国自产拍在线不卡| 免费一级毛片在线播放放视频| 十九岁在线观看免费完整版电影| 亚洲日韩在线观看免费视频| 日本亚洲中午字幕乱码| 又黄又爽无遮挡免费视频| 美女又黄又免费的视频| 免费欧洲美女牲交视频| 美女羞羞喷液视频免费| 亚洲国产精品无码久久久久久曰 | 夜夜爽妓女8888视频免费观看| 免费一级成人毛片| 久青草视频在线观看免费| 亚洲av无码专区国产乱码在线观看 | 91视频免费网站| 久久久亚洲欧洲日产国码aⅴ| 最近免费中文字幕大全免费| 亚洲二区在线视频| 免费一级黄色毛片| 免费萌白酱国产一区二区三区| 亚洲91av视频| 女人被免费视频网站| 一二三四在线观看免费中文在线观看| 亚洲中文字幕在线第六区| 十八禁无码免费网站| 亚洲国产av玩弄放荡人妇| 亚洲综合久久夜AV | 美女内射无套日韩免费播放 | 中文字幕亚洲一区二区va在线| 久久一本岛在免费线观看2020| 亚洲人成免费网站| 国产免费小视频在线观看 | 日韩免费精品视频| 色视频在线观看免费| 久久精品国产精品亚洲艾| 无码日韩精品一区二区免费 | 免费观看久久精彩视频| 一本色道久久88亚洲精品综合| 午夜亚洲国产成人不卡在线| 91精品手机国产免费| 美女被吸屁股免费网站|