最近要做一個將通信的原始數據保存起來的功能。 數據庫使用Blob類型對應java.lang.Blob;
但是發現對於浮點型的小數如果爲0的話保存後的數據會出現錯誤。
測試數據
1.00001f(float ),1.00001f(float ),1.00001f(float ),1.00001f(float )
保存前的:
16:3F80 0054 3F80 0054 3FF0 000A 7C5A C472 3FF0 000A 7C5A C472
保存後的:
16: 3F80 0054 3F80 0054 3FF0 5C30 0A7C 5AC4 723F F05C 300A 7C5A C472
比原來的數據多了2位,經過分析後發現好像是將0保存成 /'0'(注意是2個字符 '/' 跟'0') 去了。 所以多了2位。
如果小數第1位不爲0就不會出錯。
花了一段時間查找原因跟解決辦法,網上好象也沒人碰到過這種問題。
最後看幫助的時候突然看到有個setBytes,就是用byte[]保存,試試,結果成功。也沒出現上面的問題。
更改方面:數據庫還是使用Blob;
但是對象的類型改成byte[],使用hibernate的話,映射文件的類型改爲type="byte[]" 就可以了。
現在記錄一下,對碰到此問題的朋友一點幫助,如果有人知道此問題引起的原因希望也能分享出來。