图片字节数组为什么必须进行Base64编码才能传输?

服务器端得到了图片对应的字节数组,要通过http协议传输到android客户端,用new String()传入图片的字节数组,然后传到客户端,然后客户端通过String.getBytes()方法得到字节数组进行解析以后得不到图片,必须通过Base64编码,然后客户端进行Base64解码才行,为什么?

阅读 5.1k
2 个回答

http协议可以传输二进制数据(浏览器里面的图片、视频、音频都是二进制数据),问题是传输的时候必须保证字节不会改变。你直接将图片的字节转化为一个字符串一般是不行的,除非使用的字符集在0~255之间全部有对应的字符,否则就会导致某些字节转换错误,那么客户端所收到的就不再是原来的那些字节了。

base64之所以可以,是因为编码之后的字符都落在ASCII区间,而ASCII是所有字符编码都会支持的,因此可以正确传输和还原。

http(s)协议本身是不适合用来直接传输二进制数据的,这是协议本身造成的。

因此,必须将数据转化成可见的连续的内容,而Base64正好能做到这点。

传送门:扒一扒HTTP的构成

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题