Java函数实现二进制数据的编码/解码
二进制数据编码/解码是计算机领域中的基本操作之一。在实际应用中,我们常常需要将二进制数据转换为可读的文本格式,或将文本格式转换为二进制数据以便传输或存储。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("<script>alert('XSS');</script>");
System.out.println(unescapedString);
}
}
输出结果:
https%3A%2F%2Fwww.google.com%2Fsearch%3Fq%3Djava
https://www.google.com/search?q=java
<script>alert('XSS');</script>
<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编码/解码类似,都是接收二进制数据或文本数据作为输入,返回对应的编码或解码结果。
