上一篇小樂給你們說了《樂字節-Java8新特性之Date API》,接下來小樂繼續給你們說一說Java8新特性之Base64和重複註解與類型註解。java
在Java 8中,內置了Base64編解碼相關的特性。Java 8中使用三種類型的Base64編解碼:segmentfault
Base64相關的內部類:安全
相關的方法:app
對於Base64應用場景 不管是傳統軟件仍是互聯網項目開發都是比較常見的,好比傳統的郵件,Http Url 地址一般都會應用Base64 來對協議內容或Url 地址信息進行編解碼操做。框架
public static void main(String[] args) throws Exception { // 使用基本的Base64編碼 String base64encodedString = Base64.getEncoder() .encodeToString("java8 is so Easy!!!".getBytes("utf-8")); System.out.println("Basic base64 encoding:" + base64encodedString); // 解碼並輸出結果 byte[] base64decodedBytes = Base64.getDecoder().decode(base64encodedString); System.out.println("Original content: " + new String(base64decodedBytes, "utf-8")); // 使用URL類型的Base64編碼 base64encodedString = Base64.getUrlEncoder().encodeToString("https://www.sina.com".getBytes("utf-8")); System.out.println("URL base64 encoding:" + base64encodedString); // MIME類型的Base64編碼 StringBuilder stringBuilder = new StringBuilder(); for (int i = 0; i < 10; ++i) { stringBuilder.append(UUID.randomUUID().toString()); } byte[] mimeBytes = stringBuilder.toString().getBytes("utf-8"); String mimeEncodedString = Base64.getMimeEncoder().encodeToString(mimeBytes); System.out.println("MIME base64 encoding:" + mimeEncodedString); }
Java5引入了註解特性,使得開發更加的靈活,特別是如今不少的應用都是基於註解零配置開發,都是創建在Annotation基礎之上,同時使得開發變得簡單,Java 8對註解處理提供了兩點改進:可重複的註解及可用於類型的註解。 一般用於框架底層代碼開發dom
/** * 定義可重複註解 */ @Repeatable(MyParams.class) @Target({ ElementType.FIELD, ElementType.METHOD}) @Retention(RetentionPolicy.RUNTIME) public @interface MyParam { String value() default ""; } @Target({ ElementType.FIELD, ElementType.METHOD}) @Retention(RetentionPolicy.RUNTIME) public @interface MyParams { MyParam[] value(); } // 使用註解 方法上標註重複註解 @MyParam("hello") @MyParam("java8") public void testAnnotation(){ System.out.println("可重複註解測試..."); } /** 查找指定方法級別註解 遍歷輸出註解value 值 */ public static void main(String[] args) throws Exception{ Class<TestAnnotation> clazz = TestAnnotation.class; Method method = clazz.getMethod("testAnnotation"); MyParam[] params = method.getAnnotationsByType(MyParam.class); for (MyParam param : params) { System.out.println(param.value()); } }
@Repeatable(MyParams.class) @Target({ ElementType.FIELD, ElementType.METHOD,ElementType.TYPE}) @Retention(RetentionPolicy.RUNTIME) public @interface MyParam { String value() default ""; } //使用 public class TestAnnotation { private MyParam param;// 定義成員變量param 類型爲MyParam 註解類型 public static void main(String[] args) throws Exception{ // 獲取成員變量 並輸出變量類型 Field field= clazz.getDeclaredField("param"); System.out.println(field); System.out.println(field.getType()); } }