1.一個項目中的真實問題 實際項目中,本想通過C#製作小工具生成SHP的二進位空間索引文件,然後java服務端解析該空間索引文件進行使用。 在真實使用中發現java端解析的該文件內容與C#寫入的差別非常大,比如java中解析到的double均為非常大的負數。 2.排查問題 2.1 測試是否C#寫入有
1.一個項目中的真實問題
實際項目中,本想通過C#製作小工具生成SHP的二進位空間索引文件,然後java服務端解析該空間索引文件進行使用。
在真實使用中發現java端解析的該文件內容與C#寫入的差別非常大,比如java中解析到的double均為非常大的負數。
2.排查問題
2.1 測試是否C#寫入有誤
檢查寫入的值在C#中解譯為正確。
2.2 編碼錯誤
用java生成相同的文件,編碼與C#生成文件的編碼一樣,但是內容不一樣,所以本身不是編碼錯誤導致。
2.3 總結
推斷出,錯位原因為C#寫入的值和Java寫入的值不一樣。
3.錯誤原因
a.C#中byte範圍是[0,255],而Java中的byte範圍是[-128,127]。
b.C#中的位元組排序為低端排序,但是Java中的直接排序為高端排序。比如double值在java中是如此存儲的:writes that long value to the underlying output stream as an 8-byte quantity, high byte first。
4.解決思路
4.1 描述
利用C#中的sbyte[-128,127],將C#中存入的byte數組進行倒置,然後再將各byte準換至sbyte,最後整體存入該sbyte數組。
4.2 具體實現代碼
5.結果驗證
C#中寫入:
Java中讀取:
結果一致。
——歡迎轉載,但保留版權,請於明顯處標明出處:http://www.cnblogs.com/naaoveGIS/