一個轉義字符引起的。。

背景

今天一直在排查一個問題,同樣的配置,爲什麼有的機器讀出來是正確的,有的機器則不能正確解析,通過不斷的思考驗證,發現是一個因爲轉義字符引起的問題。特此在這裏記錄一下

配置文件格式與讀取過程

配置文件是一個文本文件,裏面是一行行的鍵值對類似於這樣的

aaa    bbb
aaa    bbb
aaa    bbb

解析配置文件的代碼是通過字符串的拆分進行的,簡單來說就是:

String[] kvPair = config.split("\r\n")
for(String kv:kvPair){
	String key = ke.split("    ")[0];
	String key = ke.split("    ")[1];
}

這個\r\n是在調試的時候看到的,所以寫代碼的時候就按照這樣進行切分了,結果這就是導致問題的導火索。

別人同步代碼後,發現配置文件並沒有生效因爲,別人讀取的文件字符串的是按照\n進行分割的。

問題排查

知道問題,也就對應的知道了答案,按行讀取文件就可以完美的解決問題,但是問題的排查過程纔有記錄意義。

有人說linux 和windows 的換行符有一定的區別,也確實是這樣。於是我猜測,Windows是按照\r\n進行分割的,而我把代碼提交到git上,自動的切換成\n, 於是我把工程刪除,重新clone一次,然而並沒有什麼用,於是不斷的加日誌,讓別人同步代碼,最後我比對這兩個版本的日誌,最後發現讀取的配置有問題。

具體導致這個問題的原因還沒搞清楚。

正確的解決方法

if(inputStream != null){
                InputStreamReader inputreader = new InputStreamReader(inputStream);
                BufferedReader buffreader = new BufferedReader(inputreader);
                String line;
                while (( line = buffreader.readLine()) != null) {
                    //todo
                }
            }
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章