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