欢迎访问宙启技术站
智能推送

Java函数实现二进制数据的编码/解码

发布时间:2023-05-23 11:45:53

二进制数据编码/解码是计算机领域中的基本操作之一。在实际应用中,我们常常需要将二进制数据转换为可读的文本格式,或将文本格式转换为二进制数据以便传输或存储。Java中提供了一些常用的类和方法来实现二进制数据的编码/解码。

1. Base64编码/解码

Base64是一种将二进制数据转换为可打印字符的编码方式。在Java中,我们可以使用java.util.Base64类来实现Base64编码/解码。以下是一个简单的示例:

import java.util.Base64;

public class Base64Demo {
    public static void main(String[] args) {
        // 编码二进制数据
        byte[] bytes = "Hello World".getBytes();
        byte[] encodedBytes = Base64.getEncoder().encode(bytes);
        System.out.println(new String(encodedBytes));

        // 解码字符串
        String encodedString = "SGVsbG8gV29ybGQ=";
        byte[] decodedBytes = Base64.getDecoder().decode(encodedString);
        System.out.println(new String(decodedBytes));
    }
}

输出结果:

SGVsbG8gV29ybGQ=
Hello World

在以上示例中,我们使用Base64.getEncoder()和Base64.getDecoder()方法获取Base64编码器和解码器。这两个方法返回的是java.util.Base64.Encoder和java.util.Base64.Decoder类的实例,在这些实例上我们可以调用encode()和decode()方法来进行Base64编码/解码。

2. Hex编码/解码

Hex是一种将二进制数据转换为十六进制字符串的编码方式。在Java中,我们可以使用javax.xml.bind.DatatypeConverter类来实现Hex编码/解码。以下是一个简单的示例:

import javax.xml.bind.DatatypeConverter;

public class HexDemo {
    public static void main(String[] args) {
        // 编码二进制数据
        byte[] bytes = "Hello World".getBytes();
        String hexString = DatatypeConverter.printHexBinary(bytes);
        System.out.println(hexString);

        // 解码字符串
        String encodedString = "48656C6C6F20576F726C64";
        byte[] decodedBytes = DatatypeConverter.parseHexBinary(encodedString);
        System.out.println(new String(decodedBytes));
    }
}

输出结果:

48656C6C6F20576F726C64
Hello World

在以上示例中,我们使用DatatypeConverter.printHexBinary()和DatatypeConverter.parseHexBinary()方法来进行Hex编码/解码。这两个方法接收的参数都是byte[]类型的二进制数据和对应的十六进制字符串。

3. 其他编码/解码方式

Java中还提供了一些其他的编码/解码方式,比如URL编码/解码、HTML编码/解码等。在Java中,我们可以使用java.net.URLEncoder和java.net.URLDecoder类来实现URL编码/解码,使用org.apache.commons.text.StringEscapeUtils类来实现HTML编码/解码。以下是一个简单的示例:

import java.net.URLEncoder;
import java.net.URLDecoder;
import org.apache.commons.text.StringEscapeUtils;

public class OtherDemo {
    public static void main(String[] args) {
        // URL编码
        String encodedString = URLEncoder.encode("https://www.google.com/search?q=java", "UTF-8");
        System.out.println(encodedString);

        // URL解码
        String decodedString = URLDecoder.decode("https%3A%2F%2Fwww.google.com%2Fsearch%3Fq%3Djava", "UTF-8");
        System.out.println(decodedString);

        // HTML编码
        String escapedString = StringEscapeUtils.escapeHtml4("<script>alert('XSS');</script>");
        System.out.println(escapedString);

        // HTML解码
        String unescapedString = StringEscapeUtils.unescapeHtml4("&lt;script&gt;alert('XSS');&lt;/script&gt;");
        System.out.println(unescapedString);
    }
}

输出结果:

https%3A%2F%2Fwww.google.com%2Fsearch%3Fq%3Djava
https://www.google.com/search?q=java
&lt;script&gt;alert(&#39;XSS&#39;);&lt;/script&gt;
<script>alert('XSS');</script>

在以上示例中,我们使用了java.net.URLEncoder.encode()和java.net.URLDecoder.decode()方法来进行URL编码/解码,使用org.apache.commons.text.StringEscapeUtils.escapeHtml4()和org.apache.commons.text.StringEscapeUtils.unescapeHtml4()方法来进行HTML编码/解码。这些方法的用法和上面介绍的Base64和Hex编码/解码类似,都是接收二进制数据或文本数据作为输入,返回对应的编码或解码结果。