基于JAVA的编码算法

文章详细介绍了URL编码和Base64编码的基本概念,以及它们在数据传输中的作用。URL编码用于浏览器与服务器间的数据传递,Base64编码则将二进制数据转换为文本格式,便于在文本环境中处理。文中还提供了Java代码示例,展示了这两种编码的使用方法。
摘要由CSDN通过智能技术生成

编码定义:

最简单的编码是直接给每个字符指定一个若干字节表示的整数,复杂一点的编码就需要根据一个已有的编码推算出来

URL编码

URL编码是浏览器发送数据给服务器时使用的编码,它通常附加在URL的参数部分,例如:
https://www.baidu.com/s?wd=%E4%B8%AD%E6%96%87

代码实现:

public class url {
    public static void main(String[] args) {
        try {
            String KeyWord = "美好的一天";
            String index =  URLEncoder.encode(KeyWord, "utf-8");//编码
            String outdex = URLDecoder.decode(index,"utf-8");//解码
            System.out.println(index);
            System.out.println(outdex);

        } catch (UnsupportedEncodingException e) {
            e.printStackTrace();
        }
    }
}

特别注意:

URL编码是编码算法,不是加密算法。URL编码的目的是把任意文本数据编码为%前缀表示的文本,编码后的文本仅包含A-Z,a-z,0~9,“-”,“_”,“.”,“*“和”%”,便于浏览器和服务器处理。

Base64编码

URL编码是对字符进行编码,表示成%xx的形式,而Base64编码是对二进制数据进行编码,表示成文本格式。Base64编码可以把任意长度的二进制数据变为纯文本,并且纯文本内容中且只包含指定字符内容:A-Z、a-z、0-9、+、/、=。它的原理是把3字节的二进制数据按6bit一组,用4个int整数表示,然后查表,把int整数用索引对应到字符,得到编码后的字符串。
6位整数的范围总是0-63,所以,能用64个字符表示:字符A-z对应索引0-25,字符a-z对应索引26-51,字符0-9对应索引52-61,最后两个索引62、63分别表示字符"+“和”/"。

代码实现

1.对字节数组转码/解码(二进制数据)

//Base64: 将字节数组编码成字符串或将Base64字符串解码为字节数组
public class base {
    public static void main(String[] args) {
        //原始数组
        byte[] ns = {(byte)0x65,(byte)0x87,(byte)0x78,(byte)0x45};
        //基于Base64进行编码
        String index = Base64.getEncoder().encodeToString(ns);//转码
        System.out.println(index);

        //基于Base64进行解码
        byte[] array = Base64.getDecoder().decode(index);
        for (byte b : array){
            System.out.println(Integer.toHexString(b));
        }

    }
}

2.标准的Base64编码会出现+、/和=,所以不适合把Base64编码后的字符串放到URL中。一种针对URL的Base64编码可以在URL中使用的Base64编码,它仅仅是把+变成-,/变成_

//将原始字节内容处理为适合URL传递的Base64编码
public class URLbase {
    public static void main(String[] args) {

        byte[] ns = {(byte)0x65,(byte)0x87,(byte)0x78,(byte)0x45};
        //编码
        String index1 = Base64.getEncoder().encodeToString(ns);//默认Base64编码
        String index2 = Base64.getUrlEncoder().encodeToString(ns);//基于URL方式进行Base64编码处理
        System.out.println(index1);
        System.out.println(index2);
         //解码
         //对比解码结果一致
        System.out.println(Arrays.toString(Base64.getDecoder().decode(index1)));
        System.out.println(Arrays.toString(Base64.getUrlDecoder().decode(index2)));

    }
}

3.基于Base64编码传输图片

public class Imagebase {
    public static void main(String[] args) throws IOException {

        //读取图片原始信息
        byte[] image1 = Files.readAllBytes(Paths.get("d:\\text\\java.png"));
        //1.按照Base64编码,并写入文件
        String base11 = Base64.getEncoder().encodeToString(image1);
        Files.write(Paths.get("d:\\text\\java.txt"),base11.getBytes());

        //2.从文本文件读取Base64编码内容,还原为字符串
        byte[] image = Files.readAllBytes(Paths.get("d:\\text\\java.txt"));
        String base64Image = new String(image);

        //2.对Base64编码的字符串进行解码,保存为图片
        byte[] base = Base64.getDecoder().decode(base64Image);
        Files.write(Paths.get("d:\\text\\1.png"),base);

    }
}

小结

1.Base64编码的目的是把二进制数据变成文本格式,这样在很多文本中就可以处理二进制数据。例如,电子邮件协议就是文本协议,如果要在电子邮件中添加一个二进制文件,就可以用Base64编码,然后以文本的形式传送
2.Base64编码的缺点是传输效率会降低,因为它把原始数据的长度增加了1/3。如果把Base64的64个字符编码表换成32个、48个或者58个,就可以使用Base32编码,Base48编码和Base58编码。字符越少,编码的效率就会越低
3.URL编码和Base64编码都是编码算法,它们不是加密算法
4.URL编码的目的是把任意文本数据编码为%前缀表示的文本,便于浏览器和服务器处理
向上攀爬的痛苦,终会在登顶时烟消云散                                      
——ZQY

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

菜鸟0917

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

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

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

打赏作者

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

抵扣说明:

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

余额充值