资讯专栏INFORMATION COLUMN

乐字节-Java8新特性之Base64和重复注解与类型注解

1treeS / 623人阅读

摘要:上一篇小乐给大家说了乐字节新特性之,接下来小乐继续给大家说一说新特性之和重复注解与类型注解。内部类与方法相关的内部类这是一个静态类。也是一个静态类。

上一篇小乐给大家说了《乐字节-Java8新特性之Date API》,接下来小乐继续给大家说一说Java8新特性之Base64和重复注解与类型注解。

一、Base64

在Java 8中,内置了Base64编解码相关的特性。Java 8中使用三种类型的Base64编解码:

简易模式:输出是完全按照A-Za-z0-9+/字符集映射的。编码不会自己增加输出行,解码器也不会接受任何超出A-Za-z0-9+/范围的内容。

URL模式:输出基于A-Za-z0-9+/的映射,但对于URL和文件名是安全的。

MIME模式:输出对于MIME类型的内容是友好的。如果超过76个字符,则会换行输出。,并且换行符n之后会自动添加一个r。如果某行没有r则说明输出的内容已经结束。

1、Base64 内部类与方法

Base64相关的内部类:

Base64.Encoder:这是一个静态类。实现了Base64的编码功能,格式遵循了RFC 4648和RFC 2045标准。

Base64.Decoder:也是一个静态类。实现了Base64的解码功能。

相关的方法:

getEncoder():该方法返回一个使用基本Base64编码格式的Encoder对象。相反的解码方法是getDecoder()。

getUrlEncoder():该方法返回一个使用URL类型的Base64编码格式的Encoder对象。相反的解码方法是getUrlDecoder()。

getMimeEncoder():该方法返回一个使用MIME类型的Base64编码格式的Encoder对象。相反的解码方法是getMimeDecoder()。

2、Base64 使用

对于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对注解处理提供了两点改进:可重复的注解及可用于类型的注解。 通常用于框架底层代码开发

1、可重复注解定义与使用
/**
 * 定义可重复注解
 */
@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 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());
    }
}



文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/74091.html

相关文章

  • 字节-Java8核心特性实战函数式接口

    摘要:大家好,上一篇小乐给大家讲述了乐字节核心特性表达式,点击回顾。接下来继续核心特性之函数式接口。感谢大家欣赏小乐带来的核心特性之函数式接口,接下来还会更多核心技术讲解,请关注乐字节如需要视频课程,请搜索乐字节腾讯课堂 大家好,上一篇小乐给大家讲述了《乐字节-Java8核心特性-Lambda表达式》,点击回顾。接下来继续:Java8核心特性之函数式接口。 什么时候可以使用Lambda?通常...

    niceforbear 评论0 收藏0
  • 字节-Java8特性函数式接口

    摘要:上一篇小乐带大家学过新特性表达式,什么时候可以使用通常表达式是用在函数式接口上使用的。使用实现创建产生一个工厂对象以上就是小乐带给大家的新特性之函数式接口,下一篇将会为大家带来新特性之方法引用,敬请关注。 上一篇小乐带大家学过 Java8新特性-Lambda表达式,什么时候可以使用Lambda?通常Lambda表达式是用在函数式接口上使用的。从Java8开始引入了函数式接口,其说明比较...

    lakeside 评论0 收藏0
  • 字节-Java8特性-接口默认方法

    摘要:注意当多个父接口中存在相同的默认方法时,子类中以就近原则继承。定义静态默认方法这是版简易计算器接口默认方法使用定义接口并提供默认打印方法定义接口默认方法支持方法形参这是数值运算基本接口。。。 总概 JAVA8 已经发布很久,而且毫无疑问,java8是自java5(2004年发布)之后的最重要的版本。其中包括语言、编译器、库、工具和JVM等诸多方面的新特性。 Java8 新特性列表如下:...

    arashicage 评论0 收藏0
  • 字节Java8核心特性实战方法引用

    摘要:大家好,我是乐字节的小乐,上一次我们说到了核心特性之函数式接口,接下来我们继续了解又一核心特性方法引用。方法引用是一种更简洁易懂的表达式。感谢光临阅读小乐的,敬请关注乐字节后续将继续讲述等前沿知识技术。 大家好,我是乐字节的小乐,上一次我们说到了Java8核心特性之函数式接口,接下来我们继续了解Java8又一核心特性——方法引用。 showImg(https://segmentfaul...

    lakeside 评论0 收藏0
  • 聊聊 Java8 以后各个版本的特性

    摘要:于是抽时间看了看以后各个版本的特性,做了一个总结。年和公开版本发布,取名为。此后对应版本就是,。发布,是一个重大版本更新。在此之后,就是每六个月发布一次新版本。以上和参考资料聊了一些关于的历史,下面我们看看各个版本有那些新特性。 【这是 ZY 第 11 篇原创技术文章】 某天在网上闲逛,突然看到有篇介绍 Java 11 新特性的文章,顿时心里一惊,毕竟我对于 Java 的版本认识...

    K_B_Z 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<