java解析base64大小端引发的问题

服务器获取一个api时,有个数组数据非常大,传输需要一段时间。后来想了一个办法,就是用base64编码下传输。刚开始的代码如下

ByteBuffer byteBuffer = ByteBuffer.wrap(Base64.decode(userInfo.getFeature(), Base64.DEFAULT));
FloatBuffer buf = byteBuffer.asFloatBuffer();
float[] floatArray = new float[buf.remaining()];
buf.get(floatArray);

这个floatArray确实得到了正确长度的数组,但是数组里面的元素不对,而且非常大。正确的元素不会大于10,结果得到的都是E10这么大。百思不得解,后来向一位大佬请教,他说可能是大小端问题。于是改了下代码:

ByteBuffer byteBuffer = ByteBuffer.wrap(Base64.decode(userInfo.getFeature(), Base64.DEFAULT));
byteBuffer.order(ByteOrder.LITTLE_ENDIAN);
FloatBuffer buf = byteBuffer.asFloatBuffer();
float[] floatArray = new float[buf.remaining()];
buf.get(floatArray);

加了这一句:byteBuffer.order(ByteOrder.LITTLE_ENDIAN);


问题解决了。查了下原因,服务端使用了了numpy,而cpu是使用小端,就有了下面的问题。

注意,这个是特例,一般不会遇到这种问题。只是说明一条思路。

 

 

补充:

建了一个qq群:389954854,主要目的是互帮互助,通过交流促进python技术。很多初学者往往不知道如何下手,还等什么,快快加入进来吧!

389954854

或者关注微信公众号:python码码有趣的

python码码有趣的

  • 0
    点赞
  • 0
    收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
©️2022 CSDN 皮肤主题:大白 设计师:CSDN官方博客 返回首页
评论

打赏作者

qq_25013919

你的鼓励将是我创作的最大动力

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值