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


    上一篇小乐给大家说了《乐字节-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个字符,则会换行输出。,并且换行符 之后会自动添加一个 。如果某行没有 则说明输出的内容已经结束。

     

    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<TestAnnotation> 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());
            }
        }
    

      

  • 相关阅读:
    hdu
    如何在maven中的项目使用tomcat插件
    Intellij IDEA 像eclipse那样给maven添加依赖,且Intellij idea里在pom.xml里添加Maven依赖,本地仓库下拉列表显示包很少的血的经验
    DataTables warning: table id=costitemProject
    Navicat Premium Mac 12 破解
    mac显示隐藏的文件
    tomcat7下载地址
    mac同时安装jdk7和jdk8
    屏蔽datatable错误提示
    mac上配置java jdk环境
  • 原文地址:https://www.cnblogs.com/lotbyte/p/10712871.html
Copyright © 2020-2023  润新知