? ? ? 行內超網系統(tǒng)在自動化測試工具時碰到一個有意思的問題羹幸,在windows系統(tǒng)上運行自動化測試工具的智能發(fā)起端去模擬人行發(fā)送xml報文钙皮,智能發(fā)起端讀取報文時,如果xml報文中含有換行操作曼追,超網系統(tǒng)處理發(fā)起端發(fā)送的報文失敗窍仰,后來跟超網系統(tǒng)的人溝通,了解到超網系統(tǒng)在讀取報文時會把首次出現(xiàn)\r\n之后的報文截取先來當做xml去處理礼殊。但是通過日志中打印的報文發(fā)現(xiàn)\r\n變成了\n驹吮,由此導致處理出錯。
? ? 思考問題出現(xiàn)的原因時覺得可能出現(xiàn)問題的地方有:
1.讀取數(shù)據時替換了\r\n為\n晶伦。
2.數(shù)據在讀取后java處理出問題
3.數(shù)據寫出時出的問題碟狞。
決定debug跟蹤一下數(shù)據流轉過程,查看到底是哪里的問題婚陪。發(fā)現(xiàn)發(fā)起端讀取報文時把\r\n替換為\n族沃,這個時候一度陷入了一個思維誤區(qū),一直覺得報文里的\r\n就是換行的意思泌参,這時發(fā)現(xiàn)在不同系統(tǒng)下?lián)Q行是有不同的表示的脆淹,但是超網系統(tǒng)需要判斷的僅僅是\r\n(在window是回車換行,在unix下是^M)沽一,而不是換行這個操作符.
我的思維誤區(qū)就是把\r\n這個實際的bit數(shù)抽象成計算機換行這個操作盖溺,而不同的計算機系統(tǒng)換行具有不同的表達方式。因此只有把\t\n當做計算機中實際的值去操作铣缠,java中是把\r\n抽象成換行去處理烘嘱,因此需要去特殊處理
Window上換行符是\r \n,unix上換行符\n蝗蛙,os系統(tǒng)使用\r.