在NIO中有几个比较关键的概念:Channel(通道),Buffer(缓冲区),Selector(选择器)。html
这些是Java NIO中最重要的通道的实现:java
FileChannelgit
DatagramChannelgithub
SocketChannelapi
ServerSocketChannel安全
使用Buffer读写数据通常遵循如下四个步骤:oracle
写入数据到Bufferapp
调用flip()方法函数
从Buffer中读取数据性能
调用clear()方法或者compact()方法
为了理解Buffer的工做原理,须要熟悉它的三个属性:
capacity
position
limit
capacity
做为一个内存块,Buffer有一个固定的大小值,也叫“capacity”.你只能往里写capacity个byte、long,char等类型。一旦Buffer满了,须要将其清空(经过读数据或者清除数据)才能继续写数据往里写数据。
当你写数据到Buffer中时,position表示当前的位置。初始的position值为0.当一个byte、long等数据写到Buffer后, position会向前移动到下一个可插入数据的Buffer单元。position最大可为capacity – 1.
当读取数据时,也是从某个特定位置读。当将Buffer从写模式切换到读模式,position会被重置为0. 当从Buffer的position处读取数据时,position向前移动到下一个可读的位置。
在写模式下,Buffer的limit表示你最多能往Buffer里写多少数据。 写模式下,limit等于Buffer的capacity。
当切换Buffer到读模式时, limit表示你最多能读到多少数据。所以,当切换Buffer到读模式时,limit会被设置成写模式下的position值。换句话说,你能读到以前写入的全部数据(limit被设置成已写数据的数量,这个值在写模式下就是position)
从Buffer中读取数据有两种方式:
从Buffer读取数据到Channel。
使用get()方法从Buffer中读取数据。
Path
这个类在java.nio.file,在NIO里对文件系统进行了进一步的抽象。 是用来替换原来的java.io.File。其中 FileSystems, Files, Path, PathMatcher 成为一个体系。
在java7里File和Path能够相互转换: File.toPath(), Path.toFile()
原来的File里包含了文件引用和文件,在Path系统里, Path里是文件的引用,而文件操做都放到了Files的静态方法里。这种方式究竟好很差用,我没啥感受。不过我跟人偏向于把操做放到另一个类里面。
java.nio.file.attribute包下的类提供了获取文件属性的类,针对不一样操做系统使用的类不太同样,固然也有全部操做系统通用的属性。
属性分类有一些几种:
BasicFileAttributeView
DosFileAttributeView
PosixFileAttributeView
FileOwnerAttributeView
AclFileAttributeView
UserDefinedFileAttributeView
使用ResourceBundle时,如何根据基础名称取得对应的信息文档:
1.使用指定的Locale对象取得信息文档。
2.使用Locale。getDefault()取得的对象取得信息文档。
3.使用基础名称取得信息文档。
问题1解决方案:java api通常不都是一些代码示例加说明吗?http://docs.oracle.com/javase/7/docs/api/ 这个是javase7的api
百度java api 查到的就是啊,可能有的没有中文,这个一个是能够上网留意有没有中文的,可是由于翻译问题,中文的api相对陈旧,因此建议提升本身的英文能力,阅读官方api
第三方的类通常会写在源码里,或者实在github上,或者是写在wiki里。你在工程里添加响应的源码而后按ctrl+左键,查看源码是怎么写的就能够。
问题1:
class MyClass<E> { public <T> MyClass(T t) { System.out.println("t参数的值为:" + t); } } public class GenericDiamondTest { public static void main(String[] args) { MyClass<String> mc1 = new MyClass<>(5); MyClass<String> mc2 = new <Integer> MyClass<String>(5); 2 // MyClass<String> mc3 = new <Integer> MyClass<>(5); 3 } }2处MyClass究竟是String仍是Integer ,这么表示怎么理解?3处的代码为何不对啊?
问题1解决方案:2处,MyClass固然是String,只不过它的构造函数参数Integer。
3处,错误是,当调用new时,不能用
A .
od -b -tx1 Hello.java
B .
od -tcx1 Hello.java
C .
od -tc -tx1 Hello.java
D .
od -tbx1 Hello.java
正确答案: B C
正确答案: A D
A .
Instant
B .
Duration
C .
Period
D .
LocalDateTime
正确答案: B C
A .
static
B .
final
C .
public
D .
private
E .
none of the above(以上都不是)
正确答案: D
A .
formal(形式参数)
B .
actual(实际参数)
C .
useful(有用的参数)
D .
informal(非正式参数)
E .
none of the above(以上都不是)
正确答案: B
A .
true
B .
false
正确答案: B
Which of the following objects could contain the information “eastern standard time”?(下面哪些类的对象会包含“东部标准时间”的信息)
(Choose all that apply.)
A .
Instant
B .
LocalDate
C .
LocalDateTime
D .
LocalTime
E .
ZonedDateTime
正确答案: E
A .
Instant.now()
B .
Instant.ofEpochSecond(epochSeconds)
C .
date.toInstant()
D .
dateTime.toInstant()
E .
time.toInstant()
F .
zonedDateTime.toInstant()
正确答案: F
A .
2018 APRIL 4
B .
2018 APRIL 30
C .
2018 MAY 10
D .
Another date
E .
The code does not compile.
F .
A runtime exception is thrown.
正确答案: F
教材学习中的问题和解决过程, 一个问题加1分
代码调试中的问题和解决过程, 一个问题加1分
基于评分标准,我给本博客打分:XX分。得分状况以下:xxx
本周学习的两章知识较为简单,但须要和以前学习的内容基础结合起来,因此前面的基础很重要,在学习过程当中我不断翻阅前面知识,结合起来学习会使效率提升。
代码行数(新增/累积) | 博客量(新增/累积) | 学习时间(新增/累积) | 重要成长 | |
---|---|---|---|---|
目标 | 5000行 | 30篇 | 400小时 | |
第一周 | 20/20 | 2/2 | 20/20 | |
第二周 | 140/160 | 2/4 | 18/38 | |
第三周 | 113/273 | 1/5 | 20/58 | |
第四周 | 335/608 | 1/6 | 20/78 | |
第五周 | 1159/1408 | 1/7 | 30/108 | |
第六周 | 452/1860 | 1/8 | 20/128 | |
第七周 | 343/2203 | 1/9 | 30/158 | |
第八周 | 448/2651 | 1/10 | 20/178 |