最近要做一个将通信的原始数据保存起来的功能。 数据库使用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[]" 就可以了。
现在记录一下,对碰到此问题的朋友一点帮助,如果有人知道此问题引起的原因希望也能分享出来。