20145234黃斐《Java程序設計》第八週

教材學習內容總結

第十四章-NIO與NIO2

NIO與IO的區別

NIO

  • Channel繼承框架

  • 想要取得Channel的操做對象,能夠使用Channels類,它定義了靜態方法newChannel(),可讓你從InputStream、OutputStream分別創建ReadableByteChannel、WritableByteChannel,有些InputStream、OutputStream實例自己也有方法能夠取得Channel實例,例如:FileInputSteam、FileOutputStream都有個getChannel()方法能夠分別取得FileChannel實例。java

  • Buffer繼承架構

  • Buffer的直接子類們都有個allocate()靜態方法,可讓你指定Buffer容量(Capacity),若是想取得Buffer內部的陣列,能夠使用array()方法,若是有個數組想要轉爲某個Buffer子類實例,每一個Buffer子類實例都有wrap()靜態方法能夠提供操做。
  • Buffer是容器,填裝的數據不會超過它的容量,容量大小能夠使用capacity()方法取得,實際可讀取或寫入的數據界限(Limit)索引值能夠由limit()方法得知或設定,下一個可讀取數據的位置(Position)索引值,能夠使用position()方法得知或設定。git

NIO2文件系統

  • NIO2文件系統API提供一組標準接口與類,應用程序開發者只要基於這些標準接口與類進行文件系統操做,底層實際如何進行文件系統操做,是由文件系統提供者負責。

第十五章 - 通用API

通用API

  • 日誌: 日誌對信息安全意義重大,審計、取證、入侵檢測等都會用到日誌信息
  • 日誌API
    • Logger: 注意沒法使用構造方法生成Logger對象。java.util.logging包提供了日誌功能相關類與接口,使用日誌的起點是logger類,Logger類的構造函數標示爲protected,不是java.util.logging同包的類不能直接以new建立,必許使用Logger的靜態方法,如:Logger logger = Logger.getLogger("xxx");
    • getLogger:調用getLogger()時,必須指定Logger實例所屬名稱空間,名稱空間以「.」做爲層級區分,名稱空間層級相同的Logger,其父Logger組態相同。一般在哪一個類中取得的Logger,名稱空間就會命名爲哪一個類全名。
  • 指定日誌層級
    • getLevel:
      • 取得的Logger實例之父Logger組態,就是Logger.GLOBAL_LOGGER_NAME名稱空間Logger實例,可經過getParent()取得設定的Logger實例,可經過getLevel()取得設定的Level實例。
    • setLevel:能夠經過setLevel()設定Level實例,若log()時指定的Lever實例內含的int值小於Logger設定的Level實例內含的int值,Level就不會記錄信息正則表達式

    • Handler:輸出介質
      • MemoryHandler:不會格式化日誌信息,信息會暫存於內存緩衝區,直到超過緩衝區大小,纔將信息輸出至指定的目標Handler。
      • StreamHandler:可自行指定信息輸出時使用的OutputStream實例,它與子類都會使用指定Formatter格式化信息。
        • ConsoleHandler:建立時,會自動指定OutputStream爲System.err,因此日誌信息會顯示在控制檯。
        • FileHandler:建立時會創建日誌輸出時使用的FileOutputStream,文檔位置與名稱能夠使用模式Pattern字符串指定。
        • SocketHandler:建立時能夠指定主機位置與端口,內部將自動創建網絡聯機,將日誌信息傳送至指定的主機。
    • Formatter: 格式化
      • FileHandler默認的Formatter是XMLFormatter
      • ConsoleHandler默認使用SimpleFormatter;這兩個類是Formatter的子類,能夠經過Handler的setFormatter()方法設定Formatter。
    • Filter: 過濾api

國際化基礎

  • Localization 本地化;Internationalization(i18n)國際化
  • ResourceBundle
    • ResourceBundle的靜態getBundle()方法會取得一個ResourceBundle的實例,所給定的自變量名稱是信息文檔的主文件名,getBundle()會自動找到對應的.properties文檔,取得ResourceBundle實例後,能夠使用getString()指定鍵來取得。
  • Locale
    • 國際化的三個標準是地區(Locale)信息、資源包(Resource bundle)與基礎名稱(Base name)。
    • 地區信息表明了特定的地理、政治或文化區,由一個語言編碼(由兩個小寫字母表示)與可選的地區編碼(由兩個大寫字母表示)來指定。地區信息的對應類是Locale,如Locale locale=new Locale("zh","TW");
    • 資源包中包括了特定地區的相關信息。
    • 表明同一組信息但不一樣地區的各個資源包會共享相同的基礎名稱。

Regular Expression

  • 正則表達式簡介
    • 字符與元字符:字母和數字在規則表示式中,都是按字面意義比較,有些字符前加上\以後,會被當作元字符。
    • 字符類:規則表示式中,多個字符能夠分歸在一塊兒,成爲一個字符類。歸類字符的方式之一是將字符放於[]中。
  • Pattern/Matcher
    • 在程序中使用表示式,必須先針對規則表示式作剖析、驗證等動做,肯定規則表示式語法無誤,對字符串進行比較。
    • java.util.regex.Pattern實例是規則表示式在JVM中的表明對象,Pattern的構造函數被標示爲private,必須經過Pattern的靜態方法compile()來取得。
    • 在取得Pattern的實例後,能夠使用split()方法將指定字符串依規則表示式切割,效果等於使用String的split()方法。

JDK8 API加強功能

      • JDK8中,String新增了join()靜態方法能夠直接使用
        String message = String.join("-","Java","is","cool");會產生「Java-is-cool」
      • JDK8中,針對大型數組的平行化操做,在Arrays上新增了一些方法。
        parallelPrefix()方法能夠指定XXXBinaryOperator實例,執行相似Stream的reduce()方法。
        parallelSetAll()方法用來對數組進行初始化或全面從新設置每一個索引元素。
        parallelSort()方法能夠將指定的數組分爲子數組並以平行化當時分別排序。

教材學習中的問題和解決過程

  • 問題1:怎麼正確表示貪婪正則表達式
  • 問題1解決方案:貪婪、非貪婪、獨佔量詞:{n}是貪婪量詞表示法的一種,表示前面的項目出現n次。在貪婪量詞表示法後加上?,將會成爲逐步量詞(懶惰量詞、非貪婪量詞)數組

  • 問題2:使用ResourceBunde時,如何根據基礎名稱取得對應的信息文檔?
  • 問題2解決方案:(1)使用指定的Local對象取得信息文檔;(2)使用Local.getDefault()取得的對象取得信息文檔;(3)使用基礎名稱取得信息文檔。

代碼託管

上週考試錯題解析

自評:8

  1. 教材學習中的問題和解決過程, 一個問題加1分
  2. 本週有效代碼超過300分行的(加2分)
  3. -排版精美的加一分
  4. -進度條中記錄學習時間與改進狀況的加1分
  5. -錯題學習深刻的加1分

互評:5

  • 1. 正確使用Markdown語法(加1分):
  • 2. 模板中的要素齊全(加1分)
  • 3. 教材學習中的問題和解決過程, 一個問題(加1分)
  • 4. 代碼調試中的問題和解決過程, 一個問題(加1分)-
  • 5.點評認真,能指出博客和代碼中的問題(加1分)

相關文章
相關標籤/搜索