java面试第十四天
? 包名、類名和屬性可以被序列化,方法和構造器不會被序列化的。
???????? ???????? ???????? 靜態屬性不會被序列化的。
???????? ???????? ???????? 屬性會被遞歸序列化的,也就是一個類中有引用類型的屬性,如果這個屬性對應的類實現了Serializable接口,在對象序列化時,也同樣會對這個類中的屬性進行對象序列化,如果沒有實現Serializable接口,則會拋出異常。
???????? ???????? ???????? 所有屬性必須都是可序列化的,特別是當有些屬性本身也是對象的時候,要尤其注意這一點。
???????? ???????? ???????? 網絡中傳遞對象必須實現序列化。????
????????
nio無阻塞的I/O(優化的I/O)??
???????? java.nio?? 定義塊
???????? ???????? Buffer類:一種用于特定的基本類型數據的容器
???????? ???????? ???????? 緩沖:就是塊,用來存儲內容。
???????? ???????? ???????? 容量:內存開辟的大小,根據類型的不同,有不同的空間。
???????? ???????? ???????? 界限:可用部分,即不應讀取或寫入的第一個元素的索引。
???????? ???????? ???????? 位置:當前指針的位置,從0開始。?????????
???????? ???????? ???????? 容量>=界限>=位置
???????? ???????? ???????? ????????
???????? ???????? ???????? 相關方法:
???????? ???????? ???????? ???????? int capacity()
????????? ???? ???????? ???????? ???????? 返回此緩沖區的容量。
????????? ???? ???????? ???????? int limit()
????????? ???? ???????? ???????? ???????? 返回此緩沖區的界限。
????????? ???? ???????? ???????? int position()
????????? ???? ???????? ???????? ???????? 返回此緩沖區的位置。
????????? ???? ???????? ???????? Buffer flip()
????????? ???? ???????? ???????? ???????? 相當于截斷沒有用的空間,然后把指針移向開頭,使limit=position,position=0
????????? ???? ???????? ???????? Buffer position(int newPosition)
????????? ???? ???????? ???????? ???????? 設置此緩沖區的位置。
????????? ???? ???????? ???????? ????????
???????? ???????? ???????? 當有大的文件需要處理的時候,為了不影響性能建議用直接緩沖。
???????? ???????? ???????? Buffer有直接緩沖和間接緩沖兩種。
???????? ???????? ???????? 只有ByteBuffer類提供了直接緩沖。使用直接緩沖,不影響程序。其它類想用直接緩沖需要進行轉換。
???????? ????????
???????? java.nio.channels??? 對塊進行讀寫的通道,類似于以前的流
???????? ???????? Channel接口:用于 I/O 操作的連接
???????? ????????
???????? ???????? 編程步驟:
???????? ???????? ???????? a. 先創建一個I/O流,
???????? ???????? ???????? b. 使用I/O流.getChannel()方法,獲得通道,
???????? ???????? ???????? c. 創建大小合適的ByteBUffer,
???????? ???????? ???????? d. 通道的對象.read(buffer)/write(buffer)進行讀寫,
???????? ???????? ???????? e. 關閉所有的流和通道,
???????? ???????? ???????? f. 如果有多線程并發,可以使用"通道.lock()"獲得FileLock對象,用FileLock.release() 釋放此鎖定。
???????? ???????? ???????? g. 當遇到編碼問題,使用CharSet、CharsetDecoder、CharsetEncoder三個類去解決
???????? ???????? ????????
???????? ???????? 注意:
???????? ???????? ???????? 在讀之前需要調用一下clear()方法,幫助讀操作清理緩沖;寫之前需要調用flip()方法,幫助寫操作清理緩沖。
????????
???????? java.nio.charset??? 字符集,進行編碼解碼?????? ????????
???????? ???????? Charset類:編碼類,編碼的信息
???????? ???????? ???????? forName(String charsetName)
???????? ???????? ???????? ???????? 生成一個CharSet實例。
???????? ???????? ???????? decode(ByteBuffer bb)
????????? ???? ???????? ???????? 將此 charset 中的字節解碼成 Unicode 字符的便捷方法。
????????? ???? ???????? encode(CharBuffer cb)
????????? ???? ???????? ???????? 將此 charset 中的 Unicode 字符編碼成字節的便捷方法。
????????? ???? ???????? ????????
???????? ???????? CharsetDecoder類:解碼器
???????? ???????? ???????? 能夠把特定 charset 中的字節序列轉換成 16 位 Unicode 字符序列的引擎。
???????? ???????? ????????
???????? ???????? CharsetEncoder類:編碼器,編碼的行為
???????? ???????? ???????? 能夠把 16 位 Unicode 字符序列轉換成特定 charset 中字節序列的引擎。
?
網絡編程:
???????? 網絡基礎知識
???????? ???????? Mac地址:每個網卡專用地址,也是唯一的。
???????? ???????? 端口(port):應用程序(進程)的標識(網絡通信程序)
???????? ???????? ???????? OS中可以有65536(2^16)個端口,進程通過端口交換數據。
???????? ???????? ???????? 端口是一種抽象的軟件結構,與協議相關:TCP的23端口和UDT的23端口為兩個不同的概念。
???????? ???????? ???????? 端口應該用1024以上的端口,以下的端口都已經設定功能。
???????? ???????? 協議:為了進行網絡中的數據交換而建立的約定,協議是為了保證通信的安全,不同層的協議是完全不同的。
???????? ???????? ???????? TCP協議:傳輸層的協議,重發一切錯誤的信息
???????? ???????? ???????? IP協議:保證地址和主機一一對應(ip地址+網卡地址)
???????? ???????? ????????
???????? TCP編程:
???????? ???????? TCP是一種面向連接的保證可靠傳輸的協議。通過TCP協議傳輸,得到的是一個順序的無差錯的數據流。發送方和接收方的成對的兩個socket之間必須建立連接,以便在TCP協議的基礎上進行通信,當一個socket(通常都是server socket)等待建立連接時,另一個socket可以要求進行連接,一旦這兩個socket連接起來,它們就可以進行雙向數據傳輸,雙方都可以進行發送或接收操作。
???????? ???????? ???????? 1) 服務器分配一個端口號,服務器使用accept()方法等待客戶端的信號,信號一到打開socket連接,從socket中取得OutputStream和InputStream。
???????? ?? ? ???????? 2) 客戶端提供主機地址和端口號使用socket端口建立連接,得到OutputStream和InputStream。
?
???????? ???????? Server端編碼的步驟:
???????? ???????? ???????? 1、new ServerSocket 打開端口
???????? ???????? ???????? 2、調ServerSocket的accept()等待客戶連接,當連接成功返回交互的Socket。
???????? ???????? ???????? 3、調用Socket.getInputStream,getOutputStream獲得服務器端的IO流
???????? ???????? ???????? 4、用處理流封裝后與客戶端交互,記住你讀我寫,一讀一寫。
???????? ???????? ???????? 5、關閉單一客戶端調用Socket的close(),關閉服務器調ServerSocket的close();
?
???????? ???????? Socket端編碼步驟:
???????? ???????? ???????? 1、new Socket(Server ip,Server port)試圖連接,如成功才有對象
???????? ???????? ???????? 2、調用Socket.getInputStream,getOutputStream獲得服務器端的IO流
???????? ???????? ???????? 3、用處理流封裝后與客戶端交互,記住你讀我寫,一讀一寫。
???????? ???????? ???????? 4、關閉,只有Socket的close()方法。
?
總結
以上是生活随笔為你收集整理的java面试第十四天的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Python成长之路第二篇(3)_字典的
- 下一篇: 借助二分法匹配时间戳实现快速查找日志内容