赞
踩
前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站,这篇文章男女通用,看懂了就去分享给你的码吧。
Base64能够将二进制转码成可见字符方便进行http传输,可是base64转码时会生成“+”,“/”,“=”这些被URL进行转码的特殊字符,致使两方面数据不一致。
能够在发送前将“+”,“/”,“=”替换成URL不会转码的字符,接收到数据后,再将这些字符替换回去,再进行解码,将避免该问题。
我们以hutool为例,以下是其Base64源码:
package cn.hutool.core.codec; import cn.hutool.core.io.FileUtil; import cn.hutool.core.io.IoUtil; import cn.hutool.core.util.CharsetUtil; import cn.hutool.core.util.StrUtil; import java.io.File; import java.io.InputStream; import java.io.OutputStream; import java.nio.charset.Charset; /** * Base64工具类,提供Base64的编码和解码方案<br> * base64编码是用64(2的6次方)个ASCII字符来表示256(2的8次方)个ASCII字符,<br> * 也就是三位二进制数组经过编码后变为四位的ASCII字符显示,长度比原来增加1/3。 * * @author Looly */ public class Base64 { private static final Charset DEFAULT_CHARSET = CharsetUtil.CHARSET_UTF_8; // -------------------------------------------------------------------- encode /** * 编码为Base64,非URL安全的 * * @param arr 被编码的数组 * @param lineSep 在76个char之后是CRLF还是EOF * @return 编码后的bytes */ public static byte[] encode(byte[] arr, boolean lineSep) { return lineSep ? java.util.Base64.getMimeEncoder().encode(arr) : java.util.Base64.getEncoder().encode(arr); } /** * 编码为Base64,URL安全的 * * @param arr 被编码的数组 * @param lineSep 在76个char之后是CRLF还是EOF * @return 编码后的bytes * @since 3.0.6 * @deprecated 按照RFC2045规范,URL安全的Base64无需换行 */ @Deprecated public static byte[] encodeUrlSafe(byte[] arr, boolean lineSep) { return Base64Encoder.encodeUrlSafe(arr, lineSep); } /** * base64编码 * * @param source 被编码的base64字符串 * @return 被加密后的字符串 */ public static String encode(CharSequence source) {
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。