简单说,因为某些场合并不能传输或者储存二进制流。比如,如果一个传输协议是基于ASCII文本的,那么它就不能传输二进制流,那你要将二进制流传输就得编码。常见的诸如 http 协议的 url 就是纯文本的,不能直接放二进制流。特别的,大多数现代语言的 String 类型,都不能直接储存二进制流,但可以储存BASE64编码的字符串。如果你希望用 String 类型操作一切数据,那就没法直接用二进制流。当然,另外还有一个原因,就是某些协议会对二进制流中的特定字符进行特殊处理(比如ASCII的0~32编码的字符在某些传输介质中,是会被当作特殊含义处理的),这种时候就需要通过编码来避开这些特定字符了。
举个简单的例子,比方说前端上传图片,一般直接上传图片的二进制数据,如果想把返回的Json 数据中放一个图片的二进制就不行的,如果想通过json放一个图片的数据(不是图片的URL).你就要考虑 将图片的二进制转化为Base64 进行处理了。也就是如果传输协议是纯文本的,你要想传输数据的话,那你要么传图片的url,要么传图片的Base64.但是Base64 你不能搞太长了,要不又有性能问题了,因为base64 要比原来的更长,所以没有人用base 64 来传视频和音频资源,只用来传一些小的图片资源。
http 虽然是纯文本的协议,但是http有针对二进制数据做特殊的规定(mime),所以用http直接传输二进制,所以需要就是例子说的那样了。