国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學(xué)院 > 開發(fā)設(shè)計(jì) > 正文

新I/O

2019-11-11 07:40:25
字體:
供稿:網(wǎng)友

java SE 1.4引入了大量用于改進(jìn)輸入/輸出處理機(jī)制的特性,它們位于java.nio包中,合稱“新I/O”。 

這個(gè)包中包含對(duì)下列特性的支持:字符集編碼器和解碼器,非阻塞的I/O ,內(nèi)存映射文件,文件加鎖機(jī)制 。字符集編碼器和解碼器在前面已經(jīng)說過了。

內(nèi)存映射文件 大多數(shù)操作系統(tǒng)都可以利用虛擬內(nèi)存實(shí)現(xiàn)來將一個(gè)文件或者文件的一部分“映射”到內(nèi)存中。然后,這個(gè)文件就可以當(dāng)作是內(nèi)存數(shù)組一樣地訪問,這比傳統(tǒng)的文件操作要快得多 。內(nèi)存映射比使用帶緩沖的順序輸入要稍微快一點(diǎn),但是比使用RandomaccessFile快很多。當(dāng)然,精確的值因機(jī)器不同會(huì)產(chǎn)生很大的差異,但是很明顯,如果需要使用隨機(jī)訪問,那么性能受損是不可避免的。另一方面,對(duì)于中等尺寸文件的順序讀入沒有必要使用內(nèi)存映射。首先,從文件中獲得一個(gè)通道( channel),通道是用于磁盤文件的一種抽象,它使我們可以訪問諸如內(nèi)存映射、文件加鎖機(jī)制以及文件間快速數(shù)據(jù)傳遞等操作系統(tǒng)特性。我們可以通過調(diào)用getChannel方法來獲得通道,這個(gè)方法已經(jīng)添加到了FileInputStream、FileOutputStream和RandomAccessFile類中。

FileInputStream f = new FileInputStream(xxx);FileChannel chnanel = f.getChannel();然后,通過調(diào)用FileChannel類的map方法從這個(gè)通道中獲得一個(gè)MappedByteBuffer。你可以指定想要映射的文件區(qū)域與映射模

式,有三種模式可以得到支持:

FileChannel.MapMode.READ_ONLY:所產(chǎn)生的緩沖區(qū)是只讀的,任何對(duì)該緩沖區(qū)寫入的嘗試都會(huì)導(dǎo)致ReadOnlyBufferException異常。FileChannel.MapMode.READ_WRITE:所產(chǎn)生的緩沖區(qū)是可寫的,任何修改都會(huì)在某個(gè)時(shí)刻寫回到文件中。注意,其他映射同一個(gè)文件的程序可能不能立即看到這些修改,多個(gè)程序同時(shí)進(jìn)行文件映射的確切行為是依賴于操作系統(tǒng)的。

FileChannel.MapMode.PRIVATE:所產(chǎn)生的緩沖區(qū)是可寫的,但是任何修改對(duì)這個(gè)緩沖區(qū)來說都是私有的,不會(huì)傳播到文件中。一旦有了緩沖區(qū),就可以使用ByteBuffer類和Buffer超類的方法讀寫數(shù)據(jù)了。

文件加鎖機(jī)制

文件鎖可以控制對(duì)文件或文件中某個(gè)范圍的字節(jié)的訪問,但是,文件加鎖機(jī)制在不同的操作系統(tǒng)之間變化很大。

FileChannelFileLock lock()在整個(gè)文件上獲得一個(gè)獨(dú)占的鎖,這個(gè)方法將阻塞直至獲得鎖。FileLock tryLock()在整個(gè)文件上獲得一個(gè)獨(dú)占的鎖,或者在無法獲得鎖的情況下返回null。FileLock lock(long position, long size, boolean shared)FileLock tryLock(long position, long size, boolean shared)在文件的一個(gè)區(qū)域上獲得鎖。第一個(gè)方法將阻塞直至獲得鎖,而第二個(gè)方法將在無法獲得鎖時(shí)返回null。參數(shù): position 要鎖定區(qū)域的起始位置size 要鎖定區(qū)域的尺寸shared true為共享鎖, false為獨(dú)占鎖
FileLockvoid release()釋放這個(gè)鎖。

MappedByteBuffer map(FileChannel.MapMode mode, long position, long size)將文件的一個(gè)區(qū)域映射到內(nèi)存中。參數(shù): mode FileChannel.MapMode類中的常量READ_ONLY、 READ_WRITE、或PRIVATE之一position 映射區(qū)域的起始位置size 映射區(qū)域的大小
bufferboolean hasRemaining()如果當(dāng)前的緩沖區(qū)位置沒有達(dá)到這個(gè)緩沖區(qū)的界限位置則返回true。int limit()返回這個(gè)緩沖區(qū)的界限位置,即沒有任何值可用的第一個(gè)位置。
ByteBufferbyte get()從當(dāng)前位置獲得一個(gè)字節(jié),并將當(dāng)前位置推到下一個(gè)字節(jié)。byte get(int index)從指定索引處獲得一個(gè)字節(jié)。ByteBuffer put(byte b)向當(dāng)前位置推入一個(gè)字節(jié),并將當(dāng)前位置推到下一個(gè)字節(jié)。返回對(duì)這個(gè)緩沖區(qū)的引用。ByteBuffer put(int index, byte b)向指定索引處推入一個(gè)字節(jié)。返回對(duì)這個(gè)緩沖區(qū)的引用。ByteBuffer get(byte[] destination)ByteBuffer get(byte[] destination, int offset, int length)用緩沖區(qū)中的字節(jié)來填充字節(jié)數(shù)組,或者字節(jié)數(shù)組的某個(gè)區(qū)域,并將當(dāng)前位置向前推讀入的字節(jié)數(shù)個(gè)位置。如果緩沖區(qū)不夠,那么就不會(huì)讀入任何字節(jié),并拋出BufferUnderflowException。返回對(duì)這個(gè)緩沖區(qū)的引用。參數(shù): destination 要填充的字節(jié)數(shù)組offset 要填充區(qū)域的偏移量length 要填充區(qū)域的長度ByteBuffer put(byte[] source)ByteBuffer put(byte[] source, int offset, int length)將字節(jié)數(shù)組中的所有字節(jié)或者給定區(qū)域的字節(jié)都推入緩沖區(qū)中,并將當(dāng)前位置向前推寫出的字節(jié)數(shù)個(gè)位置。如果緩沖區(qū)不夠,那么就不會(huì)讀入任何字節(jié),并拋出BufferUnderflow Exception。返回對(duì)這個(gè)緩沖區(qū)的引用。參數(shù): source 要寫出的數(shù)組offset 要寫出區(qū)域的偏移量length 要寫出區(qū)域的長度Xxx getXxx()Xxx getXxx(int index)ByteBuffer putXxx(xxx value)ByteBuffer putXxx(int index, xxx value)獲得或放置一個(gè)二進(jìn)制數(shù)。 Xxx Int、 Long、 Short、 Char、 Float或Double中的一個(gè)。ByteBuffer order(ByteOrder order)ByteOrder order()設(shè)置或獲得字節(jié)順序, order的值是ByteOrder類的常量BIG_ENDIAN或LITTLE_ENDIAN中的一個(gè)
Buffer clear()通過將位置復(fù)位到0,并將界限復(fù)位到容量,使這個(gè)緩沖區(qū)為寫出做好準(zhǔn)備。返回this。Buffer flip()通過將界限設(shè)置到位置,并將位置復(fù)位到0,使這個(gè)緩沖區(qū)為讀入做好準(zhǔn)備。返回this。Buffer rewind()通過將讀寫位置復(fù)位到0,并保持極限不變,使這個(gè)緩沖區(qū)為重新讀入相同的值做好準(zhǔn)備。返回this。Buffer mark()將這個(gè)緩沖區(qū)的標(biāo)記設(shè)置到讀寫位置,返回this。Buffer reset()將這個(gè)緩沖區(qū)的位置設(shè)置到標(biāo)記,從而允許被標(biāo)記的部分可以再次被讀入或?qū)懗觯祷豻his。int remaining()返回剩余可讀入或可寫出的值的數(shù)量,即界限與位置之間的差異。int position()返回這個(gè)緩沖區(qū)的位置。int capacity()返回這個(gè)緩沖區(qū)的容量。

charbuffer
char get()CharBuffer get(char[] destination)CharBuffer get(char[] destination, int offset, int length)從這個(gè)緩沖區(qū)的位置處開始,獲得一個(gè)char值,或者某個(gè)范圍的char值,然后將位置向前推過所讀入的字符。最后兩個(gè)方法返回this。CharBuffer put(char c)CharBuffer put(char[] source)CharBuffer put(char[] source, int offset, int length)
CharBuffer put(String source)CharBuffer put(CharBuffer source)從這個(gè)緩沖區(qū)的位置處開始,推入一個(gè)char值,或者某個(gè)范圍的char值,然后將位置向前推過所寫出的字符。CharBuffer read(CharBuffer destination)從這個(gè)緩沖區(qū)中獲得char值,然后將它們推入目標(biāo)緩沖區(qū),直至達(dá)到目標(biāo)緩沖區(qū)的界限。返回this。

發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 潜山县| 金平| 方正县| 康乐县| 孝感市| 明溪县| 贵州省| 七台河市| 视频| 县级市| 大邑县| 南昌市| 无棣县| 德庆县| 青海省| 巴林左旗| 酉阳| 永寿县| 海原县| 德州市| 陇西县| 获嘉县| 朔州市| 兴文县| 读书| 屯昌县| 呼玛县| 临江市| 昭觉县| 临夏市| 江口县| 梧州市| 佛山市| 巫溪县| 诏安县| 辽源市| 海阳市| 罗山县| 奇台县| 特克斯县| 高雄县|