Java:为什么传输图片是常用base64字符串转码,而不是直接传输byte[]呢?求解
展开全部
先说说base64吧:对于图片来说,一个字节占八位,如果都换成byte[]的话,会很长,不便于传输,那么就把没6个字节来对应一个新的字符(如010011是19,对应base64编码的T),,所以这个目的主要是精简数据,便于传输;
另外常用的用途是:做不严格的加密用,比如常见的磁力链接,你懂的;因为它相对于严格加密省时省力,速度快,况且可恢复(如果用MD5就不行)
另外常用的用途是:做不严格的加密用,比如常见的磁力链接,你懂的;因为它相对于严格加密省时省力,速度快,况且可恢复(如果用MD5就不行)
追问
大哥,为啥换成byte[]就很长呢?为什么腻?还有就是base64默认都是每6个字节一转换的吗?
追答
好吧,其实,之所以用base64传图片,就是为了加密,包括我们的一些东西也用base64;
“还有就是base64默认都是每6个字节一转换的吗?”
这个问题:你想过为什么叫base64,而不是base88之类的吗?你先想 如果一个六位的二进制,总共能表达多少个数呢,很明显是2的6次方,是64对吧。当时设计的时候的思想就是:有一串很长的0011这样的数,那我得想办法把它编码成一定的格式,那么就按照每6个二进制来对应一个数(这个规则是人定的,他就规定010011对应T;当然你也可以把每四个二进制数对应一个编码,那么这个编码表就由你来定,你可以让0100对应S,也可以对应t,那就形成了你的Base16编码了),按照这个思想编完之后,就可以传输了,那么接受完之后就可以按照同样的规则进行解码了。
你会说:既然能解码,那这个东西还能叫加密吗?其实我个人的理解,这个不叫加密,应该叫转码更贴切一定,最常见的作用是:稍微一转码,你用肉眼就看不出来了,比如我的一个下载地址,用这个转码,就是一堆乱七八糟的东西,反正你不解码(针对广大用户),你是不知道我的内容的。还有就是http传参数,如果你的表中有个隐藏的字段想传给服务器,那么你构造字段的时候肯定不想让用户或者其他人看到吧,好吧,那就转码啊,这样他就不知道你发送的什么了(当然你也可以不转码,用明文传输,如?name=zhangsan)
够清楚了吧
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询