摘要:上一篇小樂(lè)給大家說(shuō)了樂(lè)字節(jié)新特性之,接下來(lái)小樂(lè)繼續(xù)給大家說(shuō)一說(shuō)新特性之和重復(fù)注解與類型注解。內(nèi)部類與方法相關(guān)的內(nèi)部類這是一個(gè)靜態(tài)類。也是一個(gè)靜態(tài)類。
上一篇小樂(lè)給大家說(shuō)了《樂(lè)字節(jié)-Java8新特性之Date API》,接下來(lái)小樂(lè)繼續(xù)給大家說(shuō)一說(shuō)Java8新特性之Base64和重復(fù)注解與類型注解。
一、Base64在Java 8中,內(nèi)置了Base64編解碼相關(guān)的特性。Java 8中使用三種類型的Base64編解碼:
簡(jiǎn)易模式:輸出是完全按照A-Za-z0-9+/字符集映射的。編碼不會(huì)自己增加輸出行,解碼器也不會(huì)接受任何超出A-Za-z0-9+/范圍的內(nèi)容。
URL模式:輸出基于A-Za-z0-9+/的映射,但對(duì)于URL和文件名是安全的。
MIME模式:輸出對(duì)于MIME類型的內(nèi)容是友好的。如果超過(guò)76個(gè)字符,則會(huì)換行輸出。,并且換行符n之后會(huì)自動(dòng)添加一個(gè)r。如果某行沒(méi)有r則說(shuō)明輸出的內(nèi)容已經(jīng)結(jié)束。
1、Base64 內(nèi)部類與方法Base64相關(guān)的內(nèi)部類:
Base64.Encoder:這是一個(gè)靜態(tài)類。實(shí)現(xiàn)了Base64的編碼功能,格式遵循了RFC 4648和RFC 2045標(biāo)準(zhǔn)。
Base64.Decoder:也是一個(gè)靜態(tài)類。實(shí)現(xiàn)了Base64的解碼功能。
相關(guān)的方法:
getEncoder():該方法返回一個(gè)使用基本Base64編碼格式的Encoder對(duì)象。相反的解碼方法是getDecoder()。
getUrlEncoder():該方法返回一個(gè)使用URL類型的Base64編碼格式的Encoder對(duì)象。相反的解碼方法是getUrlDecoder()。
getMimeEncoder():該方法返回一個(gè)使用MIME類型的Base64編碼格式的Encoder對(duì)象。相反的解碼方法是getMimeDecoder()。
2、Base64 使用對(duì)于Base64應(yīng)用場(chǎng)景 無(wú)論是傳統(tǒng)軟件還是互聯(lián)網(wǎng)項(xiàng)目開發(fā)都是比較常見(jiàn)的,比如傳統(tǒng)的郵件,Http Url 地址通常都會(huì)應(yīng)用Base64 來(lái)對(duì)協(xié)議內(nèi)容或Url 地址信息進(jìn)行編解碼操作。
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); // 解碼并輸出結(jié)果 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); }二、重復(fù)注解與類型注解
Java5引入了注解特性,使得開發(fā)更加的靈活,特別是現(xiàn)在很多的應(yīng)用都是基于注解零配置開發(fā),都是建立在Annotation基礎(chǔ)之上,同時(shí)使得開發(fā)變得簡(jiǎn)單,Java 8對(duì)注解處理提供了兩點(diǎn)改進(jìn):可重復(fù)的注解及可用于類型的注解。 通常用于框架底層代碼開發(fā)
1、可重復(fù)注解定義與使用/** * 定義可重復(fù)注解 */ @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(); } // 使用注解 方法上標(biāo)注重復(fù)注解 @MyParam("hello") @MyParam("java8") public void testAnnotation(){ System.out.println("可重復(fù)注解測(cè)試..."); } /** 查找指定方法級(jí)別注解 遍歷輸出注解value 值 */ public static void main(String[] args) throws Exception{ Class2、用于類型的注解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()); } }
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://www.ezyhdfw.cn/yun/74091.html