#在千鋒“逆戰”學習第35天#周總結

周總結
本週主要學習了IO框架、網絡編程、反射等內容

IO框架

什麼是流
概念:內存與存儲設備之間傳輸的通道
水藉助管道傳輸,數據藉助流傳輸

流的分類
按方向:
輸入流:將存儲設備中的內容讀入到內存
輸出流:將內存中的內容寫入到存儲設備當中

按單位:
字節流:以字節爲單位,可以讀寫所有數據
字符流:以字符爲單位,只能讀寫文本數據

按功能:
節點流:具有實際傳輸數據的讀寫功能
過濾流:在節點流的基礎之上增強功能

字節流
字節流的父類(抽象類)

												public int read(){}
InputStream:字節輸入流		public int read(byte[] b){}
												public int read(byte[] b,int off,int len){}

												public void write(){}
OutputStream:字節輸出流		public void write(byte[] b){}
												public void write(byte[] b,int off,int len){}

字節節點流

FileOutputStream:
public void write(byte[] b)//一次寫多個字節,將b數組中所有字節,寫入輸出流

FileInputStream:
public void read(byte[] b)//從流中讀取多個字節,將讀到的內容存入b數組,返回實際讀到的字節數;如果達到文件的尾部,則返回-1。

字節過濾流
緩衝流:BufferedOutputStream/BufferedInputStream
提高IO效率,減少磁盤訪問次數
數據存儲在緩衝區中,flush是將緩衝區的內容寫入文件中,也可以直接close

對象流:ObjectOutputStream/ObjectInputStream
增強了緩衝區功能
增強了讀寫8種基本數據類型和字符串功能
增強了讀寫對象的功能:readObject(Object obj)從流中讀取一個對象
writeObject(Object obj)向流中寫入一個對象
讀寫對象,實現對象的持久化儲存

使用流傳輸對象的過程稱爲序列化,反序列化

對象序列化
對象序列化的細節:
必須實現Serializable接口
必須保證其所有屬性均可以序列化
transient修飾爲臨時屬性,不參與序列化
讀到文件尾部的標誌:java.io.EOFExecption

File類
概念:代表物理盤符中的一個文件或文件夾
方法:
CreatNewFile()//創建一個新文件
Mkdir()//創建一個新目錄
Delete()//刪除文件或空目錄
Exists()//判斷File對象所代表的對象是否存在
getAbsolutePath//獲取文件的絕對路徑
getName()//取得名字
getParent()//獲取文件/目錄所在的目錄
isDrectory()//是否是目錄
isFile()//是否是文件
length()//獲得文件的長度
listFiles()//列出目錄中的所有內容
reNameTo()//修改文件名爲

FileFileter接口
public interface FileFileter
boolean accept(File pathname)
當調用File類中的listFile()方法時,支持傳入FileFileter接口接口實現類,對獲取文件進行過濾,只有滿足條件的文件纔可以出現在listFile()的返回值中。

字符編碼
ISO-8859-1 收錄除ASCLL外,還包括西歐,希臘語,泰語,阿拉伯語,希伯來語對應的文字符號。
UTF-8 針對Unicode的可變長度字符編碼 (常用)
GB2312 簡體中文
GBK 簡體中文 擴充 (常用)
BIG5 臺灣 繁體中文

注意:當編碼方式和節碼方式不一致時,會出現亂碼

字符流
字符流的父類:

Reader:字符輸入流
public int read(){}
public int read(char[] c){}
public int read(char[] b,int off,int len

Writer:字符輸出流
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

字符過濾流
緩衝流:BufferredWriter/BufferedReader
支持輸入換行符
可以寫一行,讀一行

PrintWriter:
封裝了print()/println()方法,支持寫入後換行

字符節點流
橋轉換流:InputStreamReader/OutputStreamWriter
可將字節流轉換爲字符流
可設置字符的編碼方式
使用步驟:
創建節點流
[創建過濾流,設置字符編碼集]
封裝過濾流
讀寫數據
關閉流

網絡編程

什麼是網絡
概念:由點和線構成,表示諸多對象間的相互聯繫

什麼是計算機網絡
爲實現資源共享和信息傳遞,通過通信線路連接起來的若干主機(Host)

互聯網:(Internet)點與點相連
萬維網:(WWW-World Wide Web)端與端相連
物聯網:(IoT-Internet of things)物與物相連
網絡編程:讓計算機與計算機之間建立連接,進行通信
在這裏插入圖片描述
在這裏插入圖片描述

TCP/UDP
TCP協議:Transmission Control Protocol 傳輸控制協議
是一種面向連接的、可靠的、基於字節流的傳輸層通信協議。數據大小無限制,建立連接的過程需要三次握手,斷開連接的過程需要四次揮手

UDP協議:User Datagram Protocol 用戶數據報協議
是一種無連接的傳輸層協議,提供面向事物的簡單不可靠信息傳送服務,每個包的大小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類:用於實驗,240.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[] getAllByName(String host) 獲得所有相關地址對象
public String getHostAddress() 獲取IP地址字符串
public String getHostName() 獲得IP地址主機名

基於TCP的網絡編程
Socket編程:
Socket(套接字)是網絡中的一個通信節點。
分爲客戶端Socket與服務器ServerSocket。
通信要求:IP地址 + 端口號

開發步驟
建立通信連接(會話):
創建ServerSocket,指定端口號
調用accept等待客戶端接入
客戶端請求服務器:
創建Socket,指定服務器IP + 端口號
使用輸出流,發送請求數據給服務器
使用輸入流,接收響應數據到客戶端(等待)
服務器響應客戶端:
使用輸入流,接收請求數據到服務器(等待)
使用輸出流,發送響應數據給客戶端

反射

什麼是類對象
類的對象:基於某個類new出來的對象,也稱爲實例對象

類對象:類加載的產物,封裝了一個類的所有信息(類名、父類、接口、屬性、方法、構造方法)

在這裏插入圖片描述

獲取類對象
通過類的對象,獲取類對象
Student s = new Student();
Class c = s.getClass();

通過類名獲取類對象
Class c = 類名.class;

通過靜態方法獲取類對象
Class c = Class.forName(“包名,類名”);

常用方法
public String getName()
public Package getPackage()
public Class<? super T> getSuperclass()
public Class<?>[] getInterfaces()
public Filed[] getFileds()
public Method[] getMothods()
public Constructor<?>[] getConstructor()
public T newInstance()

工廠設計模式
開發中有一個非常重要的原則“開閉原則”,對擴展開放,對修改關閉

工廠模式主要負責對象創建問題

可通過反射進行工廠模式的設計,完成動態的對象創建

單例模式

單例:只允許創建一個該例對象

方式1:餓漢式(類加載時創建,天生線程安全)
在這裏插入圖片描述
方式2:懶漢式(使用時創建,線程不安全,加同步)
在這裏插入圖片描述
注:因爲可能突破Singleton屬性,將值改爲null

方式3:懶漢式(使用時創建,線程安全)

在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章