亚洲中字慕日产2020,大陆极品少妇内射AAAAAA,无码av大香线蕉伊人久久,久久精品国产亚洲av麻豆网站

資訊專欄INFORMATION COLUMN

樂(lè)字節(jié)-Java8新特性之Base64和重復(fù)注解與類型注解

1treeS / 681人閱讀

摘要:上一篇小樂(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{
    Class clazz = TestAnnotation.class;
    Method method = clazz.getMethod("testAnnotation");
    MyParam[] params = method.getAnnotationsByType(MyParam.class);
    for (MyParam param : params) {
        System.out.println(param.value());
    }
}
2、用于類型的注解
@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

Failed to recv the data from server completely (SIZE:0/8, REASON:closed)