文章目录
一、Base64 编码解码
1.1 基本的编码和解码
- Base64 编码: - 使用
Base64.getEncoder().encodeToString(originalInput.getBytes())
对原始字符串进行编码。-Base64.getEncoder()
返回一个Base64.Encoder
实例,调用encodeToString()
方法将原始字符串的字节数组编码为Base64字符串。 - Base64 解码: - 使用
Base64.getDecoder().decode(encodedString)
对Base64编码后的字符串进行解码。-Base64.getDecoder()
返回一个Base64.Decoder
实例,调用decode()
方法将Base64编码后的字符串解码为原始的字节数组。- 使用new String(decodedBytes)
将解码后的字节数组转换为字符串。 - 注意事项:- 在实际应用中,确保使用相同的编码和解码方法,以避免数据损坏或不正确的解码结果。- Java 8 中的
java.util.Base64
类提供了方便且高效的Base64编码和解码功能,适用于处理字符串数据的安全传输和存储。
publicstaticvoidmain(String[] args){// 原始字符串String originalInput ="Hello World!";// 编码为Base64String encodedString =Base64.getEncoder().encodeToString(originalInput.getBytes());System.out.println("Encoded string: "+ encodedString);// 解码Base64byte[] decodedBytes =Base64.getDecoder().decode(encodedString);String decodedString =newString(decodedBytes);System.out.println("Decoded string: "+ decodedString);}// 输出Encoded string:SGVsbG8gV29ybGQhDecoded string:HelloWorld!
1.2 URL 和文件名安全的编码解码器
- URL 和文件名安全的 Base64 编码: - 使用
Base64.getUrlEncoder().encodeToString(originalInput.getBytes("utf-8"))
对原始字符串进行URL和文件名安全的Base64编码。-Base64.getUrlEncoder()
返回一个Base64.Encoder
实例,调用encodeToString()
方法将原始字符串的字节数组编码为URL和文件名安全的Base64字符串。 - URL 和文件名安全的 Base64 解码: - 使用
Base64.getUrlDecoder().decode(encodedString)
对URL和文件名安全的Base64编码后的字符串进行解码。-Base64.getUrlDecoder()
返回一个Base64.Decoder
实例,调用decode()
方法将Base64编码后的字符串解码为原始的字节数组。- 使用new String(decodedBytes, "utf-8")
将解码后的字节数组转换为字符串。 - 注意事项:- URL 和文件名安全的Base64编码会使用
-
替换+
,并且使用_
替换/
,以确保编码结果可以安全地在URL和文件名中使用。- 如果使用的是不同的字符集编码(例如utf-8
),请确保在编码和解码过程中使用相同的字符集,以避免数据损坏或不正确的解码结果。
publicstaticvoidmain(String[] args)throwsUnsupportedEncodingException{// 原始字符串String originalInput ="Hello World!";// URL 和文件名安全的 Base64 编码String encodedString =Base64.getUrlEncoder().encodeToString(originalInput.getBytes("utf-8"));System.out.println("Encoded string (URL safe): "+ encodedString);// 解码 URL 和文件名安全的 Base64byte[] decodedBytes =Base64.getUrlDecoder().decode(encodedString);String decodedString =newString(decodedBytes,"utf-8");System.out.println("Decoded string: "+ decodedString);}// 输出Encoded string (URL safe):SGVsbG8gV29ybGQhDecoded string:HelloWorld!
1.3 MIME Base64编码和解码
MIME Base64编码与普通的Base64编码在行尾添加换行符,以便在电子邮件等MIME(Multipurpose Internet Mail Extensions)环境中进行传输。
- MIME Base64 编码: - 使用
Base64.getMimeEncoder().encodeToString(originalInput.getBytes("utf-8"))
对原始字符串进行MIME Base64编码。-Base64.getMimeEncoder()
返回一个Base64.Encoder
实例,调用encodeToString()
方法将原始字符串的字节数组编码为MIME Base64字符串。 - MIME Base64 解码: - 使用
Base64.getMimeDecoder().decode(encodedString)
对MIME Base64编码后的字符串进行解码。-Base64.getMimeDecoder()
返回一个Base64.Decoder
实例,调用decode()
方法将MIME Base64编码后的字符串解码为原始的字节数组。- 使用new String(decodedBytes, "utf-8")
将解码后的字节数组转换为字符串。 - 注意事项:- MIME Base64编码会在每行末尾添加换行符
\r\n
,以便适应电子邮件等格式要求。- 如果使用的是不同的字符集编码(例如utf-8
),请确保在编码和解码过程中使用相同的字符集,以避免数据损坏或不正确的解码结果。
publicstaticvoidmain(String[] args)throwsUnsupportedEncodingException{// 原始字符串String originalInput ="Hello World!";// MIME Base64 编码String encodedString =Base64.getMimeEncoder().encodeToString(originalInput.getBytes("utf-8"));System.out.println("Encoded string (MIME):"+ encodedString);// 解码 MIME Base64byte[] decodedBytes =Base64.getMimeDecoder().decode(encodedString);String decodedString =newString(decodedBytes,"utf-8");System.out.println("Decoded string: "+ decodedString);}// 输出Encoded string (MIME):SGVsbG8gV29ybGQhDecoded string:HelloWorld!
二、Optional类
java.util.Optional
类是用来处理可能为null的值的容器。提供了一种优雅的方式来避免
NullPointerException
,并且可以更清晰地表达某个值可能不存在的情况。
- 创建 Optional 对象- **
Optional.of(value)
**:如果value
不为 null,则创建一个包含指定值的 Optional 对象;如果value
为 null,则会抛出NullPointerException
。- **Optional.ofNullable(value)
**:无论value
是否为 null,都会创建一个对应的 Optional 对象。如果value
是 null,则创建一个空的 Optional 对象。 - 检查是否有值-
isPresent()
:检查 Optional 对象中是否包含值。 - 获取值- **
get()
**:如果 Optional 对象中有值,则返回该值;否则抛出NoSuchElementException
。 - 处理空值- **
orElse(defaultValue)
**:如果 Optional 对象中有值,则返回该值;否则返回defaultValue
。- **orElseGet(Supplier)
**:如果 Optional 对象中有值,则返回该值;否则调用Supplier
提供的方法来获取默认值。 - 条件操作-
ifPresent()
:在 Optional 对象非空时执行特定操作。 - 过滤值-
filter()
方法过滤 Optional 对象中的值。 - 映射值-
map()
或flatMap()
:对 Optional 对象中的值进行映射操作。
publicstaticvoidmain(String[] args){// 创建一个包含非空值的 Optional 对象Optional<String> optional1 =Optional.of("Hello");System.out.println("Optional 1 value: "+ optional1.get());// 创建一个可能为 null 的 Optional 对象String nullableValue =null;Optional<String> optional2 =Optional.ofNullable(nullableValue);System.out.println("Optional 2 is present? "+ optional2.isPresent());// 获取 Optional 对象中的值String value = optional1.get();System.out.println("Value: "+ value);// 检查 Optional 对象中是否有值if(optional1.isPresent()){System.out.println("Optional contains value.");}else{System.out.println("Optional is empty.");}// 使用 orElse 提供默认值String result1 = optional2.orElse("Default Value");System.out.println("Result 1: "+ result1);// 使用 orElseGet 提供默认值String result2 = optional2.orElseGet(()->{// 处理逻辑,返回默认值return"Default Value from Supplier";});System.out.println("Result 2: "+ result2);// 如果 Optional 对象中有值,则执行操作
optional1.ifPresent(val ->System.out.println("Value is present: "+ val));// 过滤值Optional<String> filteredOptional = optional1.filter(val -> val.startsWith("H"));System.out.println("Filtered Optional value: "+ filteredOptional.orElse("Not found"));// 映射值Optional<String> transformedOptional = optional1.map(val -> val.toUpperCase());System.out.println("Transformed Optional value: "+ transformedOptional.orElse("No value"));// 抛出异常try{
value = optional2.orElseThrow(()->newIllegalArgumentException("Value is required."));System.out.println("Value: "+ value);}catch(IllegalArgumentException e){System.out.println("Exception: "+ e.getMessage());}}// 输出Optional1 value:HelloOptional2 is present?falseValue:HelloOptional contains value.
Result1:DefaultValueResult2:DefaultValue from SupplierValue is present:HelloFilteredOptional value:HelloTransformedOptional value:HELLOException:Value is required.
三、Nashorn JavaScript
Java 8 引入了 Nashorn 作为新的 JavaScript 引擎,用于替代旧版的 Rhino 引擎,可以在 Java 应用程序中执行 JavaScript 代码。Nashorn 通过优化和与 Java 的本地集成提供了更好的性能。
- 执行内联脚本:
publicstaticvoidmain(String[] args)throwsException{// 创建 Nashorn 脚本引擎ScriptEngine engine =newScriptEngineManager().getEngineByName("nashorn");// 执行 JavaScript 代码
engine.eval("print('Hello Nashorn!')");}
- 传递变量:
publicstaticvoidmain(String[] args)throwsException{ScriptEngine engine =newScriptEngineManager().getEngineByName("nashorn");// 将 Java 变量传递给 JavaScript
engine.put("name","Alice");
engine.eval("print('Hello, ' + name + '!')");}
- 高级特性: - Java 互操作性: JavaScript 代码可以直接与 Java 类和对象交互。- 函数式编程: Nashorn 支持 lambda 表达式和流式 API,使其更符合现代 JavaScript 标准。- 性能: 由于其现代化设计和优化技术,Nashorn 通常比 Rhino 更快。
// Java 类publicclassPerson{publicStringgetName(){return"Alice";}}// JavaScript 代码
engine.eval("var person = new Person(); print(person.getName());");
- 命令行工具: - Nashorn 还配备了一个命令行工具 (
jjs
),用于直接从终端执行 JavaScript 文件,这对于测试和调试非常有用。
$ jjs script.js
- 与 Java 应用程序集成: - 可以将 Nashorn 集成到 Java 应用程序中,用于脚本支持、规则引擎和动态行为等多种用途。- 提供了在 Java 的稳健性和 JavaScript 的脚本能力之间进行灵活结合的能力。
懒惰也是天生的,勤奋需自己努力,一放松就懒了
版权归原作者 忆~遂愿 所有, 如有侵权,请联系我们删除。