yeshucheng
          追逐自己,追逐方向,心隨悟所動(dòng)
          posts - 24,comments - 24,trackbacks - 0
           

          數(shù)據(jù)對(duì)于輸入和輸出的操作耗時(shí)是非常嚴(yán)重的問題,如果把這個(gè)問題放入到網(wǎng)絡(luò)上去看待更甚是值得注意的一個(gè)問題了。假如結(jié)合基礎(chǔ)的OS知識(shí)我們也知道如果要減少這種I/O操作的耗時(shí)或者也可以說提升這種效率的話,最大的可能就是減少物理讀寫的次數(shù),而且盡可能做到主存數(shù)據(jù)的重讀性(操作系統(tǒng)也在加強(qiáng)說明更多減少抖動(dòng)現(xiàn)象的產(chǎn)生)。

          java.nio包中我們可以直接來操作相對(duì)應(yīng)的API了。可以讓java更加方便的直接控制和運(yùn)用緩沖區(qū)。緩沖區(qū)有幾個(gè)需要了解的特定概念需要詳盡來解釋,才能更好的知道我們下面一些列需要針對(duì)的問題實(shí)質(zhì)。

          屬性

          容量(capacity):顧名思義就是表示緩沖區(qū)中可以保存多少數(shù)據(jù);

          極限(limit):緩沖區(qū)中的當(dāng)前數(shù)據(jù)終結(jié)點(diǎn)。不過它是可以動(dòng)態(tài)改變的,這樣做的好處也是充分利用重用性;

          位置(position):這個(gè)也好理解,其實(shí)就是指明下一個(gè)需要讀寫數(shù)據(jù)的位置。

          上面上個(gè)關(guān)系還可以具體用圖示的方式來表達(dá)整體概念,如下圖所示:


          在極限的時(shí)候就說到可以修改它,所以對(duì)于它的操作由以下方法:

          l         clear():首先把極限設(shè)置為容量,再者就是需要把位置設(shè)置為0

          l         flip():把極限設(shè)置為位置區(qū),再者就是需要把位置設(shè)置為0

          l         rewind():不改變極限,不過還是需要把位置設(shè)置為0

          最為最基礎(chǔ)的緩沖區(qū)ByteBuffer,它存放的數(shù)據(jù)單元是字節(jié)。首先要強(qiáng)調(diào)的是ByteBuffer沒有提供公開的構(gòu)造方法,只是提供了兩個(gè)靜態(tài)的工廠方法。

          l         allocate(int capacity):返回一個(gè)ByteBuffer對(duì)象,參數(shù)表示緩沖區(qū)容量大小。

          l         allocateDirect (int capacity):返回一個(gè)ByteBuffer對(duì)象,參數(shù)也是一樣表示緩沖區(qū)容量大小。

          在這里需要注意的是在使用兩者的時(shí)候需要特別小心,allocateDirect和當(dāng)前操作系統(tǒng)聯(lián)系的非常緊密,它牽涉到使用native method的方法,大家知道一旦本地方法就是需要考慮調(diào)用dll(動(dòng)態(tài)鏈接庫)這個(gè)時(shí)候基本也就失去了JAVA語言的特性,言外之意對(duì)于耗資源非常大。所以如果考慮到當(dāng)前使用的緩存區(qū)比較龐大而且是一個(gè)長(zhǎng)期駐留使用的,這個(gè)時(shí)候可以考慮使用它。

          posted on 2009-02-13 20:56 葉澍成 閱讀(261) 評(píng)論(0)  編輯  收藏 所屬分類: java基礎(chǔ)NIO學(xué)習(xí)
          主站蜘蛛池模板: 白玉县| 塔河县| 龙山县| 错那县| 云阳县| 洛阳市| 沁水县| 东乡族自治县| 博野县| 平阴县| 蒲江县| 浪卡子县| 湖北省| 威宁| 湖州市| 九江县| 广灵县| 乌鲁木齐县| 清水河县| 阿合奇县| 成都市| 铅山县| 浑源县| 乌鲁木齐县| 宣威市| 当雄县| 宜丰县| 普兰店市| 汤原县| 梅州市| 静海县| 随州市| 清涧县| 抚顺县| 大方县| 富源县| 乌鲁木齐县| 内江市| 武功县| 高雄县| 商洛市|