文章版權由做者李曉暉和博客園共有,若轉載請於明顯處標明出處:http://www.cnblogs.com/naaoveGIS/。java
實際項目中,本想經過C#製做小工具生成SHP的二進制空間索引文件,而後java服務端解析該空間索引文件進行使用。數組
在真實使用中發現java端解析的該文件內容與C#寫入的差異很是大,好比java中解析到的double均爲很是大的負數。微信
檢查寫入的值在C#中解譯爲正確。工具
用java生成相同的文件,編碼與C#生成文件的編碼同樣,可是內容不同,因此自己不是編碼錯誤致使。測試
推斷出,錯位緣由爲C#寫入的值和Java寫入的值不同。編碼
a.C#中byte範圍是[0,255],而Java中的byte範圍是[-128,127]。3d
b.C#中的字節排序爲低端排序,可是Java中的字節排序爲高端排序。好比double值在java中是如此存儲的:writes that long value to the underlying output stream as an 8-byte quantity, high byte first。blog
利用C#中的sbyte[-128,127],將C#中存入的byte數組進行倒置,而後再將各byte準換至sbyte,最後總體存入該sbyte數組。排序
C#中寫入:索引
Java中讀取:
結果一致。
你們若是用C#將string變成二進制寫入到文件中時,會發現Java寫入相同的string值生成的文件大小比C#的小,這是爲何呢?
查看Java中寫入string二進制的說明:Writes the string to the file as a sequence of bytes. Each character in the string is written out, in sequence, by discarding its high eight bits。
可見其寫入的字符,默認爲ANSI編碼,即只有一個字節,同時其字節排序仍然是高位排序。發現這點後,咱們能夠對C#中寫入字符串進行重寫:
-----歡迎轉載,但保留版權,請於明顯處標明出處:http://www.cnblogs.com/naaoveGIS/
若是您以爲本文確實幫助了您,能夠微信掃一掃,進行小額的打賞和鼓勵,謝謝 ^_^