在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 |