Base64

对Base64编码的支持已经被加入到Java 8官方库中,这样不需要使用第三方库就可以进行Base64编码,例子代码如下:

 package com.cn.yunliu.jdk8;

 import java.nio.charset.StandardCharsets;
import java.util.Base64; /**
*
* @author Administrator
*
* base64 编码格式 与解码
*/
public class Base64Code {
public static void main(String[] args) {
String str = "demo";
//base64 encoded 把str转换成base64 bytes
String encoded = Base64.getEncoder().encodeToString(str.getBytes(StandardCharsets.UTF_8));
System.out.println("encoded:"+encoded); //base64 decoded
String decoded = new String(Base64.getDecoder().decode(encoded),StandardCharsets.UTF_8);
System.out.println("decoded:"+decoded);
}
}

这个例子的输出结果如下:

encoded:ZGVtbw==
decoded:demo

新的Base64API也支持URL和MINE的编码解码。
(Base64.getUrlEncoder() / Base64.getUrlDecoder(), Base64.getMimeEncoder() / Base64.getMimeDecoder())。

Date/Time API(JSR 310)

Java 8引入了新的Date-Time API(JSR 310)来改进时间、日期的处理。时间和日期的管理一直是最令Java开发者痛苦的问题。java.util.Date和后来的java.util.Calendar一直没有解决这个问题(甚至令开发者更加迷茫)。

因为上面这些原因,诞生了第三方库Joda-Time,可以替代Java的时间管理API。Java 8中新的时间和日期管理API深受Joda-Time影响,并吸收了很多Joda-Time的精华。新的java.time包包含了所有关于日期、时间、时区、Instant(跟日期类似但是精确到纳秒)、duration(持续时间)和时钟操作的类。新设计的API认真考虑了这些类的不变性(从java.util.Calendar吸取的教训),如果某个实例需要修改,则返回一个新的对象。

 package com.cn.yunliu.jdk8;

 import java.time.Clock;
import java.time.Duration;
import java.time.Instant;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.LocalTime;
import java.time.Month;
/**
*
* @author Administrator
*
*jdk 8 date 特性
*/ public class DateCode {
public static void main(String[] args) {
//localDate 只显示年月日
LocalDate ld = LocalDate.now();
System.out.println("localdate:"+ld);
//LocalTime 只显示时分秒
LocalTime lt = LocalTime.now();
System.out.println("localtime:"+lt); //Clock类使用时区来返回当前的纳秒时间和日期,Clock可以替代System.currentTimeMillis()和TimeZone.getDefault()。
Clock clock = Clock.systemUTC();
System.out.println("clock:"+clock);
Instant instant = clock.instant();
System.out.println("instant:"+instant); //localDateTime 包含了LocalDate和LocalTime的信息,但是不包含ISO-8601日历系统中的时区信息
LocalDateTime ldt = LocalDateTime.now();
System.out.println("LocalDateTime:"+ldt); //ZoneDateTime 它保存有ISO-8601日期系统的日期和时间,而且有时区信息。 //Duration 它持有的时间精确到秒和纳秒。这使得我们可以很容易得计算两个日期之间的不同
LocalDateTime start = LocalDateTime.of(2016, Month.JULY, 20, 18, 18);
LocalDateTime end = LocalDateTime.of(2017, Month.JULY, 20, 18, 18);
Duration dur = Duration.between(start, end); System.out.println("2个时间差为:"+dur.toDays()+"day"+"\t"+dur.compareTo(Duration.ZERO));
}
}

例子的输出结果是:

localdate:2018-08-13
localtime:17:29:13.438
clock:SystemClock[Z]
instant:2018-08-13T09:29:13.453Z
LocalDateTime:2018-08-13T17:29:13.469
2个时间差为:365day 1

Optional

Java应用中最常见的bug就是空值异常。在Java 8之前,Google Guava引入了Optionals类来解决NullPointerException,从而避免源码被各种null检查污染,以便开发者写出更加整洁的代码。Java 8也将Optional加入了官方库。

Optional仅仅是一个容易:存放T类型的值或者null。它提供了一些有用的接口来避免显式的null检查,可以参考Java 8官方文档了解更多细节。

接下来看一点使用Optional的例子:可能为空的值或者某个类型的值:

 package com.cn.yunliu.jdk8;

 import java.util.Optional;
/**
*
* @author Administrator
*如果Optional实例持有一个非空值,则isPresent()方法返回true,
*否则返回false;orElseGet()方法,Optional实例持有null,
*则可以接受一个lambda表达式生成的默认值;
*map()方法可以将现有的Opetional实例的值转换成新的值;
*orElse()方法与orElseGet()方法类似,但是在持有null的时候返回传入的默认值。
*/
public class OptionalCode {
public static void main(String[] args) {
//Optional实例为null,isPresent返回false
Optional<?> fullName = Optional.ofNullable("1");//or null
fullName.isPresent();
System.out.println(fullName.isPresent()); //orElseGet()方法,Optional实例持有null,则可以接受一个lambda表达式生成的默认值
fullName.orElseGet(()->"none");
System.out.println(fullName.orElseGet(()->"none"));
Optional<?> opt =Optional.of("1");
System.out.println(opt.orElse(null)); //map()方法可以将现有的Opetional实例的值转换成新的值;
fullName.map(s->"nihao").orElse("none");
System.out.println(fullName.map(s->"nihao").orElse("none"));
}
}

有值得输出结果如下:

true
1
1
nihao

当fullName为null时输出结果如下:

false
none
1
none

JDK8 特性详解的更多相关文章

  1. Java9 新特性 详解

    作者:木九天   <   Java9 新特性 详解  > Java9 新特性 详解 摘要: 1.目录结构 2.repl工具 jShell命令 3.模块化 4.多版本兼容jar包 5.接口方 ...

  2. Java基础学习总结(33)——Java8 十大新特性详解

    Java8 十大新特性详解 本教程将Java8的新特新逐一列出,并将使用简单的代码示例来指导你如何使用默认接口方法,lambda表达式,方法引用以及多重Annotation,之后你将会学到最新的API ...

  3. C#中的 特性 详解(转载)

    本篇幅转载于:http://www.cnblogs.com/rohelm/archive/2012/04/19/2456088.html C#中特性详解 特性提供了功能强大的方法,用于将元数据或声明信 ...

  4. iOS开发——高级特性&Runtime运行时特性详解

    Runtime运行时特性详解 本文详细整理了 Cocoa 的 Runtime 系统的知识,它使得 Objective-C 如虎添翼,具备了灵活的动态特性,使这门古老的语言焕发生机.主要内容如下: 引言 ...

  5. ES6,ES2105核心功能一览,js新特性详解

    ES6,ES2105核心功能一览,js新特性详解 过去几年 JavaScript 发生了很大的变化.ES6(ECMAScript 6.ES2105)是 JavaScript 语言的新标准,2015 年 ...

  6. 《Android群英传》读书笔记 (5) 第十一章 搭建云端服务器 + 第十二章 Android 5.X新特性详解 + 第十三章 Android实例提高

    第十一章 搭建云端服务器 该章主要介绍了移动后端服务的概念以及Bmob的使用,比较简单,所以略过不总结. 第十三章 Android实例提高 该章主要介绍了拼图游戏和2048的小项目实例,主要是代码,所 ...

  7. C#各个版本中的新增特性详解

    序言 自从2000年初期发布以来,c#编程语言不断的得到改进,使我们能够更加清晰的编写代码,也更加容易维护我们的代码,增强的功能已经从1.0搞到啦7.0甚至7.1,每一次改过都伴随着.NET Fram ...

  8. ASP.NET Core Web服务器 Kestrel和Http.sys 特性详解

    ASP.NET Core Web服务器 Kestrel和Http.sys 特性详解 1.1. 名词解释 1.2. Kestrel基本工作原理 1.2.1. Kestrel的基本架构 1.2.2. Ke ...

  9. Android群英传笔记——第十二章:Android5.X 新特性详解,Material Design UI的新体验

    Android群英传笔记--第十二章:Android5.X 新特性详解,Material Design UI的新体验 第十一章为什么不写,因为我很早之前就已经写过了,有需要的可以去看 Android高 ...

随机推荐

  1. JDBC、JNDI和DBCP的区别

    JDBC:Java DataBase Connectivity,java连接数据库和执行SQL语句的API. 数据源:Data Source.就是将IP.数据库.用户名.密码封装起来对外只提供一个JN ...

  2. Java技巧之双括弧初始化

    由于Java语言的集合框架中(collections, 如list, map, set等)没有提供任何简便的语法结构,这使得在建立常量集合时的工作非常繁索.每次建立时我们都要做: 定义一个临时的集合类 ...

  3. linux下如何添加一个用户并且让用户获得root权限 备用

    (2010-12-02 09:58:30) 转载▼ 标签: 帐号 权限 杂谈 分类: Linux 测试环境:CentOS 5.5 1.添加用户,首先用adduser命令添加一个普通用户,命令如下: # ...

  4. leetCode 典型回溯例子

    39题,翻译题目:给定一组候选集和一个目标值,在c的所有组合中,找出所有总和等于T的组合. 候选数组c中同一个数可以被选择多次(不限次数) 分析: 典型的回溯法应用 对数组里面的每个数,用递归的方式相 ...

  5. java⑩

    1.for循环: for循环语法 for(表达式1;表达式2;表达式3){ 循环体4} 表达式1:初始化变量 只执行一次!表达式2:循环条件 满足条件进入循环体4表达式3:迭代变量 如果循环体 中只有 ...

  6. Win10访问不到XP共享的解决:

    不知道别人的是怎么解决. 反正我这么解决了. 我的win10笔记本,是使用windows帐户登陆的.可以同步很多东西. 同事的电脑是台式老古董XP. 扫描不到网上邻居,手动\\ip也访问不到. 最后安 ...

  7. C语言转义字符'\'

    body, table{font-family: 微软雅黑; font-size: 13.5pt} table{border-collapse: collapse; border: solid gra ...

  8. web service基础知识

    Web服务基础 用户访问网站的基本流程 我们每天都会用web客户端上网,浏览器就是一个web客户端,例如谷歌浏览器,以及火狐浏览器等. 当我们输入www.oldboyedu.com/时候,很快就能看到 ...

  9. 不管你是否已经准备面试, 这45道Python面试题都对你非常有帮助!(mark!)

    1)什么是Python?使用Python有什么好处? Python是一种编程语言,包含对象,模块,线程,异常和自动内存管理.蟒蛇的好处在于它简单易用,可移植,可扩展,内置数据结构,并且它是一个开源的. ...

  10. h5视频配置

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...