亚洲精品一二区_国产黄色片网站_99久久久成人国产精品_蜜臀网_国产精品一区二区三区免费_成人av中文字幕_91精品国产欧美一区二区成人

當(dāng)前位置:首頁 > 嵌入式培訓(xùn) > 嵌入式學(xué)習(xí) > 講師博文 > Java中的新IO—NIO

Java中的新IO—NIO 時(shí)間:2018-09-26      來源:未知

一、新IO概述:

新IO和傳統(tǒng)IO都是用于進(jìn)行輸入/輸出,相比于傳統(tǒng)IO面向流的處理方式,新IO采用內(nèi)存映射文件來處理輸入/輸出,新IO將文件或文件的一段區(qū)域映射到內(nèi)存中,這樣就可以像訪問內(nèi)存一樣來訪問文件了,所以這種訪問方式既方便又快得多。

新IO中的兩個(gè)核心對象:Channel(通道)和Buffer(緩沖)。Channel用于新IO的數(shù)據(jù)傳輸,相對于傳統(tǒng)IO中的InputStream和OutputStream,Channel提供了一個(gè)map()方法用來將一段數(shù)據(jù)映射成為一塊內(nèi)存。也就是在新IO中,改變了傳統(tǒng)IO面向流的處理而轉(zhuǎn)向面向塊的處理方式。

Buffer是一個(gè)容器,它的本質(zhì)是一個(gè)數(shù)組。發(fā)送到Channel的所有對象以及從Channel取出的所有數(shù)據(jù)先存放到Buffer中。

除了上面兩個(gè)核心對象外,新IO還提供了Charset類用于將Unicode字符串映射成字節(jié)序列以及逆映射操作。以及Selector類用于支持非阻塞式輸入輸出。

二、Java中與新IO相關(guān)的包:

1.java.nio包:主要包含各種與Buffer相關(guān)的類

2.java.nio.channels包:主要包含與Channel和Selector相關(guān)的類

3.java.nio.charset包:主要包含與字符集相關(guān)的類

4.java.nio.channels.spi包:主要包含與Channel相關(guān)的服務(wù)提供者編程接口。

5.java.nio.charset.spi包:包含與字符集相關(guān)的服務(wù)提供者編程接口

三、Channel介紹以及使用

Channel可以直接將指定文件的部分或全部直接映射成Buffer,并且程序不能直接訪問Channel中的數(shù)據(jù),Channel只能與Buffer交互。

Channel接口提供了DatagramChannel、FIleChannel、SocketChannel、ServerSocketChannel等實(shí)現(xiàn)類。由此可見Channel是按功能進(jìn)行了劃分。

Channel所有的對象都不是通過構(gòu)造器創(chuàng)建的,而是通過傳統(tǒng)節(jié)點(diǎn)InputStream和OutputStream的getChannel()方法獲得的。但是不同的節(jié)點(diǎn)獲得的Channel對象也不同,是各自節(jié)點(diǎn)類型對應(yīng)的Channel對象。例如:FileInputStream通過getChannel獲得的Channel對象是FileChannel對象。

雖然Channel對象既可以讀取也可以寫入,但是InputStream獲得的Channel只能讀,OutputStream獲得Channel對象只能寫。

Channel中常用的方法:map()、read()、write(),read()和write()方法有一系列的重載形式,這些方法用于從Buffer中讀或?qū)憯?shù)據(jù)。

四、Buffer的介紹及使用

Buffer可以保存多個(gè)類型相同的數(shù)據(jù)。Buffer是一個(gè)抽象類,常用的子類是ByteBuffer,它可以在底層字節(jié)數(shù)組上進(jìn)行g(shù)et/set操作。另外還有其他的子類:CharBuffer、ShortBuffer、IntBuffer等。

Buffer中有三個(gè)重要的概念:容量(capacity)、界限(limit)、和位置(position)。

容量:緩沖區(qū)的容量,即多可以存儲(chǔ)多少數(shù)據(jù),其中緩沖區(qū)的容量不可以為負(fù)數(shù),創(chuàng)建后不容許改變。

界限:第一個(gè)不應(yīng)該被讀出或者寫入的緩沖區(qū)位置索引,也就是以此為界限后面的區(qū)域無法讀寫數(shù)據(jù)。

位置:指明下一個(gè)可以被讀出或者寫入的緩沖區(qū)位置索引。

put()方法和get()用于放入、取出數(shù)據(jù)。

flip()方法,調(diào)用該方法后界限就回到原來的position所在位置。

clear()方法,將position設(shè)置為0。將limit設(shè)為與capacity相等。

五、字符集和Charset

所有的文件底層都是二進(jìn)制文件,即全部都是字節(jié)碼。把明文的字符轉(zhuǎn)換成二進(jìn)制序列稱為編碼,把二進(jìn)制編碼轉(zhuǎn)換成明文字符串稱為解碼。JDK1.4之后提供了Charset類來處理字節(jié)序列和字符序列之間的轉(zhuǎn)換關(guān)系,該類中包含用于解碼和編碼的方法。其中該類提供的availableCharset()方法來獲取當(dāng)前JDK所支持的所有字符集。

每個(gè)字符集都有一個(gè)字符串別名:

GBK:簡體中文字符集

BIG5:繁體中文字符集

ISO-8859-1:ISO拉丁字母表

UTF-8:8位UCS轉(zhuǎn)換格式

UTF-16BE:16位UCS轉(zhuǎn)換格式,大端字節(jié)順序

UTF-16LE:16位UCS轉(zhuǎn)換格式,小端字節(jié)順序

UTF-16:16位UCS轉(zhuǎn)換格式,字節(jié)順序由可選的字節(jié)順序標(biāo)記來標(biāo)識(shí)

當(dāng)知道了字符集的別名之后,程序就可以調(diào)用Charset的forName()方法來創(chuàng)建Charset對象,然后通過創(chuàng)建的對象的newDecoder()、newEncoder()方法分別返回CharsetDecoder、CharsetEncoder對象代表Charset的解碼器和編碼器。調(diào)用CharsetDecoder的Decode()方法將字節(jié)序列轉(zhuǎn)換成字符序列,調(diào)用CharsetEncoder的encode()方法可以將字符序列轉(zhuǎn)化成字節(jié)序列。

上一篇:消息隊(duì)列

下一篇:Xml文件約束規(guī)則使用詳解

熱點(diǎn)文章推薦
華清學(xué)員就業(yè)榜單
高薪學(xué)員經(jīng)驗(yàn)分享
熱點(diǎn)新聞推薦
前臺(tái)專線:010-82525158 企業(yè)培訓(xùn)洽談專線:010-82525379 院校合作洽談專線:010-82525379 Copyright © 2004-2022 北京華清遠(yuǎn)見科技集團(tuán)有限公司 版權(quán)所有 ,京ICP備16055225號-5,京公海網(wǎng)安備11010802025203號

回到頂部

主站蜘蛛池模板: 国产一级做a爱免费观看 | 在线xxx| 国产欧美亚洲精品 | 日本不卡免费高清视频 | 久草视频在线首页 | 国产亚洲欧美在线 | 欧美三级一区二区三区 | 久久99综合 | 欧美日韩中文一区 | 国内精品久久久久久影院网站小说 | 久久成年片色大黄全免费网站 | 日本在线免费 | 韩国19福利视频免费观看 | 欧美久久一区二区三区 | 国产在线a | 97夜色| 三级理论在线 | 国产成人一区二区三区视频免费蜜 | 国产免费一区二区三区香蕉精 | 亚洲日本一区二区三区高清在线 | 日本高清色片 | 69式在线观看视频免费 | 色婷婷天天综合在线 | 国产人妖一区二区 | 国产精品日本欧美一区二区 | 久9热免费精品视频在线观看 | 韩国精品一区二区 | 日本成人在线网址 | 国产成人欧美一区二区三区的 | 国产精品欧美亚洲韩国日本不卡 | 日本在线观看不卡 | 久久国产综合尤物免费观看 | 国产高清在线91福利 | 麻豆破解| 精品欧美成人bd高清在线观看 | a级v片| 手机在线看片国产日韩生活片 | 亚洲欧美日韩三级 | 国产成人精品免费视 | 巨熟乳波霸若妻中文观看免费 | 漂亮的保姆韩剧在线看 |