第七週
Day31、Day32
I/O框架
-
流的概念
- 內存與存儲設備之間傳輸數據的通道
-
流的分類
-
按方向【重點】
-
輸入流
- 將存儲設備中的內容讀入到內存中
-
輸出流
- 將,<內存>中的內容寫入到<存儲設備>中
-
-
按單位
-
字節流
- 以字節爲單位,可以讀寫所有數據
-
字符流
- 以字符爲單位,只能讀寫文本數據
-
-
按功能
-
節點流
- 具有實際傳輸數據的讀寫功能
-
過濾流
- 在節點流的基礎之上增強功能
-
-
-
字節流
-
字節流的父類(抽象類)
-
InputStream 字節輸入流
- public int read(){}
- public int read(byte [] b ){}
- public int read(byte[] b ,int off,int len){}
-
OutputStream: 字節輸出流
- public void write(int n ){}
- public void write(byte[] b){}
- public void write(byte[] b ,int off ,int len){}
-
-
字節節點流
-
FileOutputStream :
- public void write(byte[] b);//一次寫多個字節,將數組中所有字節,寫入輸出流
-
FileInputStream:
- public int read)(byte[] b)//從流中讀取多個字節,將讀到內容存入b 數組,返回實際讀到的字節數;如果達到文件的尾部,則返回-1
-
-
字節過濾流
-
緩衝流: BufferedOutputStream/BufferedInputStream
- 提高IO效率,減少訪問磁盤的次數
- 數據存儲在緩衝區中,flush 是將緩存區的內容寫入文件中,也可以直接close
-
對象流:ObjectOutputStream/ObjectInputStream
-
增強了緩衝區功能
-
增強了讀寫8種基本數據類型和字符串功能
-
增強了讀寫對象的功能
- readObject() 從流中讀取一個對象
- writeObject(Object obj) 向流中寫入一個對象
-
使用流傳輸對象的過程稱爲序列化、反序列化
-
-
-
對象序列化
-
序列化細節
- 必須實現Serializable接口
- 必須保證其所有屬性均可序列化
- transicent 修飾爲臨時屬性,不參與序列化
- 讀取到文件尾部的標誌: java.io.EOFException
-
-
-
(字符編碼)編碼方式
- ISO-8859-1收錄除了ASCII外,還包括西歐、希臘語、泰語、阿拉伯語、希伯來語對應的文字符號
- UTF-8 針對Unicode 的可變長長度字符編碼
- GB2312 簡體中文
- GBK 簡體中文、補充
- BIG5 臺灣,繁體中文
- 注意:當編碼方式不一致時,會出現亂碼
-
字符流
-
字符流的父類(抽象類):
-
Reader:字符輸入流
- public int read(){}
- public int read(char[] c){}
- public int read(char [] b, int off ,int len){}
-
Write:字符輸出流
- public void write(int n ){}
- public void write(String str[]){}
- public void write(char [] c){}
-
字符節點流
-
FileWriter
- public void write(String str ) // 一次寫入多個字符,將b 數組中所有字符,寫入輸出流
-
FileReader
- public int read(char [] c ) // 從流中讀取多個字符,將讀到內容存入c 數組,返回實際讀到的字符數,如果達到文件的尾部,則返回-1
-
-
-
字符過濾流
-
緩衝流:BufferedWrite、BufferedReader
- 支持輸入換行符
- 可一次寫一行,讀一行
-
printWriter
- 封裝了print() 、println () 方法,支持寫入後換行
-
-
字符節點流
-
橋轉換流:InputStreamReader/OutputStreamWriter
- 可將字節轉換爲字符流
- 可設置字符的編碼方式
-
使用步驟
- 創建節點流
- 創建過濾流,設置字符編碼集
- 封裝過濾流
- 讀寫數據
- 關閉流
-
-
-
File類
-
概念:代表物理盤符中的一個文件或者文件夾
-
方法
- createNewFile() // 創建一個新文件
- Mkdir ()//創建一個新目錄
- Delete()//刪除文件或新目錄
- Exists()//判斷File對象所對象所代表的是否存在
- getAbsolutePath()// 獲取文件的絕對路徑
- getName() //取得名字
- getParent() //獲取文件/目錄所在的目錄
- isDirectory() // 是否是目錄
- isFile() // 是否是文件
- length() //獲得文件的長度
- ListFiles()// 列出目錄中的所有內容
- renameTo()//修改文件名爲
-
Day33-34
網絡編程
-
什麼是網絡
- 由點和線構成,表示諸多對象間的相互聯繫
-
計算機網絡
- 爲實現資源共享和信息傳遞,。通過通信線路連接起來的若干主機(Host)
- 互聯網:點與點相連
- 萬維網:端與端相連
- 物聯網:物與物相連
- 網路編程:讓計算機與計算機之間建立連接、進行通信
-
網絡模型
- 第一層:物理層設備之間的數據通信提供傳輸信號和物理介質。(雙絞線、光纖纖維)
- 第二層:鏈路層在物理層上,通過規程或協議(差錯控制)來控制傳輸數據的正確性。(MAC)
- 第三層:網絡層負責定義了能夠標識所有網絡節點的邏輯地址(IP地址)
- 第四層:傳輸層負責是否選擇差錯恢復協議、數據流重組、錯誤順序重排。(TCP、UDP)
- 第五層:會話層負責應用建立和維持會話,使通信在失效時繼承恢復通信。(斷點續傳)
- 第六層:表示層負責定義轉換數據格式及加密,允許選擇以二進制或ASCII格式傳輸
- 第七層:應用層負責文件訪問和管理、可靠運輸服務、遠程操作服務。(HTPP、FTP、SMTP)
-
通信協議
-
TCP/IP 模型
-
一組用於實現網絡互連的通信協議,將協議分成四個層次
-
分四層
-
應用層
-
對應OSI參考模型的應用層、表示層、會話層
- 第四層:應用層負責傳送各種最終形態的數據,是直接與用戶打交道的層,典型協議是HTTP、FTP等
-
-
傳輸層
-
對應OSI參考模型的傳輸層
- 第三層:傳輸層負責傳送文本數據,主要協議是TCP、UDP協議
-
-
網絡層
-
對應OSI參考模型的網絡層
- 第二層:網絡層負責分配地址和傳送二進制數據,主要協議是IP協議
-
-
網絡接口層
-
對應OSI參考模型的數據鏈路層和物理層
- 第一層:接口層負責建立電路連接。是整個網絡的物理基礎,典型的協議包括以太網、ADSL等等
-
-
-
TCP協議: 傳輸控制協議
- 是一種面向連接的、可靠性的、基於字節流的傳輸層通信協議。數據大小無限制。建立連接的過程需要三次握手,斷開連接的過程需要四次握手
-
UDP協議:用戶數據報協議
- 是一種無連接的傳輸層協議,提供面向事務的簡單不可靠信息傳送服務,每個包的大小64KB
-
-
IP
-
IP協議: Internet Protocol Address 互聯網協議地址/網際協議地址
- 分配給互聯網設備的數字標籤(唯一標識)
-
IP地址分爲兩種
- IPV4 :4字節32位整數,並分成4段8位的二進制數,每8位之間用圓點隔開,每8位整數可以轉換爲一個0^255的十進制整數 格式:D.D.D.D 例如 255.255.255.255
- IPV6 :16字節128位整數,並分成8段十六進制數,每16位之間用圓點隔開。每16位整數可以轉換爲一個0^65535 的十進制數 格式: X. X.X .X.X.X.X.X 例如FFFF.FFFF.FFFF.FFFF.FFFF.FFFF.FFFF.FFFF
-
IPV4 的應用分類
- A類:政府機構,1.0.0.1^126.255.255.254
- B 類:中型企業,128.0.0.1^191.255.255.254
- C 類:個人用戶,192.0.0.1^223.255.255.254
- D 類:用於組播,224.0.0.1^239.255.255.254
- E 類:用於實驗,244.0.0.1^255.255.255.254
- 迴環地址:127.0.0.1, 指本機,一般用於測試使用
- 查看IP命令:IPconfig
- 測試IP命令:ping D.D.D.D
-
-
Port
-
端口號:在通信實體上進行網絡通訊的程序的唯一標識
-
端口分類
- 公認端口: 0^1023
- 註冊端口:1024^49151
- 動態或私有端口:49152^65535
-
常用端口
- MySQL:3306
- Oracle:1521
- Tomcat:8080
- SMTP:25
- web 服務器:80
- FTP服務器:21
-
-
InetAddress類
-
概念:表示互聯網協議(IP)地址對象,封裝了該IP相關的所有信息,並提供獲取信息的常用方法
-
方法:
- public static InetAddress getLocalHost() 獲取本地主機地址對象
- public static InetAddress getByName(String host) 根據主機名稱獲得地址對象
- public static InetAddress [] getALLName(String host ) 獲得所有相關地址對象
- public String getHostAddress() 獲取IP地址字符串
- public String getHostName() 獲取IP地址主機名
-
-
-
網絡編程
-
基於TCP的網絡編程
-
Socket 編程:
- Socket(套接字)是網絡中的一個通信節點
- 分爲客戶端Socket 與服務器ServerSocket
- 通信要求:IP地址+端口號
-
-
開發步驟
-
建立通信連接(會話)
- 創建ServerSocket,指定端口號
- 調用accept 等待客戶端接入
-
客戶端請求服務器
- 創建Socket,指定服務器IP+ 端口號
- 使用輸出流,發送請求數據給服務器
- 使用輸入流,接收響應數據到客戶端(等待)
-
服務器響應客戶端
- 使用輸入流,接收請求數據到服務器(等待)
- 使用輸出流,發送響應數據給客戶端
-
-
課堂案例
-
使用S coket編程實現服務器端註冊
- 註冊信息保存在properies 文件中
- 封裝格式
- Id= {id :“1001”,name :}
- 註冊成功後返回字符串“註冊成功”
-
使用Scoket編程實現服務器端登錄
- 獲取properties 文件中的用戶信息,進行用戶名與密碼的校驗
- 校驗成功後返回字符串“登錄成功”
-
-
總結
- 計算機網絡:爲實現資源共享和信息傳遞,通過該通信線路連接起來的若干主機
- TCP協議:是一種面向連接的,可靠的,基於字節流的傳輸層通信協議。數據大小無限制
- IP:分配給互聯網設備的數字標籤(唯一標識)
- Port:在通信實體上進行網絡通訊的程序的唯一標識
- Scoket 編程:建立連接、接收請求、發送響應
Day35
反射
-
什麼是類對象
- 類的對象:基於某個類new 出來的對象,也稱爲實例對象
- 類對象:類加載的產物,封裝了一個類的所有信息(類名、父類、接口、屬性、方法、構造方法)
-
獲取類對象
-
通過類的對象。獲取類對象
- Student s = new Student(); Class c = s.getClass()
-
通過類名獲取類對象
- Class c = 類名.class;
-
通過靜態方法獲取類對象
- Class c = Class.forName(“包名.類名”);
-
-
常見操作
-
常用方法
- public Sring getName()
- public Package getPackage()
- public Class<? super T >getSuperclass()
- public Class<?>[] getInterfaces()
- public Field[] getFields()
- public Method[] getMethods()
- public Constructor<?>[] getConstructors()
- public T newInstance()
-
-
設計模式介紹
-
工廠設計模式
- 開發中有一個非常重要的原則“開閉原則”。對拓展開放、對修改關閉
- 工廠模式主要負責對象創建的問題
- 可通過反射進行工廠模式的設計,完成動態的對象創建
-
-
單例設計模式
-
單例模式
-
單例:只允許創建一個該類的對象
-
方式1:餓漢式(類加載時創建,天生線程安全)
class Singletion {
private static final Singleton instance = new Singleton();
private Singletonb() {}
public static Singleton getInstance(){}
return instance;}
-
方式2“懶漢式(使用時創建,線程不安全,加同步)
class Singleton {
private static Singleton intance = null ;private Sington(){}
public static synchronized Singleton getInstance(){
if(instance == null){
instance = new Singleton();}
return instance;}
} -
方式3:懶漢式(使用時創建,線程安全)
class Singleton{
private Singleton(){}private static class Holer{
static Singleton s = new Singleton();
}
public static Singleton instance(){retuen Holder.s;
}}
-
-
-
總結
-
類對象
- Class對象,封裝了一個類的所有信息;程序運行中,可通過class 對象獲取類的信息
-
獲取類對象的三種方式
- Class c = 對象。getClass()
- Class c = 類名.class;
- class c = Class.forName(“包名.類名”);
-
工廠模式
- 主要用於創建對象,通過反射進行工廠模式的設計,完成動態的對象創建
-
單例模式
- Singleton ,只允許創建一個該類的對象
微信公衆號:愛編碼的程序員
- Singleton ,只允許創建一個該類的對象
-