xml 的特殊字符的處理方法
遇到這一方面的問題是因為我試圖把一個對象序列化之后存貯到xml文件中,然后從xml文件中讀取字符串,并反序列化對象(hadoop mapreduce程序中通過JobConf向tasktracker傳送對象)。
有關(guān)序列化:
當我把序列化之后的數(shù)據(jù)直接存在xml中后,在解析xml時遇到解析錯誤,原因是有非法字符。在詳細閱讀xml的說明之后才發(fā)現(xiàn):< > ' " &是不允許作為xml的PCDATA的。要使用這幾個字符,必須要把他們替換為內(nèi)建實體:
實體引用 字符
< <
> >
& &
" "
' '
所以,最直接的方法就是自己控制,在寫入xml文件時把特殊字符轉(zhuǎn)為實體引用,在讀取的時候,再轉(zhuǎn)回來。當然還有另外一個方法就是不把字符串當PCDATA,而是當成CDATA來使用(沒有測試)。
用實體引用的方法太麻煩,而我的應用xml的格式不能自己規(guī)定,所以只好尋找另外的方法:BASE64編碼。這是一種常用在網(wǎng)絡(luò)傳輸數(shù)據(jù)的編碼方式。把存在這些非法字符的字符編碼成base64編碼,就不會有這些字符了。最重要的是java api中提供了這種編碼的編碼器和解碼器,位于sun.misc的BASE64Encoder和BASE64Decoder。這樣就可以把序列化之后得到的字節(jié)流轉(zhuǎn)化成字符串了。并且也可以存貯在xml文件中。
不過這兩個類并不是sun的開放api,編譯會有警告。
相關(guān)文章
用Maven打成可執(zhí)行jar,包含maven依賴,本地依賴的操作
這篇文章主要介紹了用Maven打成可執(zhí)行jar,包含maven依賴,本地依賴的操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-08-08Spring依賴注入多種類型數(shù)據(jù)的示例代碼
這篇文章主要介紹了Spring依賴注入多種類型數(shù)據(jù),本文通過實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2022-03-03MybatisPlus使用Wrapper實現(xiàn)條件查詢功能
這篇文章主要介紹了MybatisPlus使用Wrapper實現(xiàn)查詢功能,使用它可以實現(xiàn)很多復雜的查詢,本文通過實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2023-06-06SpringBoot項目使用內(nèi)置的單機任務調(diào)度功能詳解
這篇文章主要介紹了SpringBoot項目使用內(nèi)置的單機任務調(diào)度功能詳解,SpringBoot框架中提供了2個注解來讓開發(fā)者快速配置來實現(xiàn)單機定時任務調(diào)度的功能,分別是@EnableScheduling和 @Scheduled,需要的朋友可以參考下2024-01-01