乡下人产国偷v产偷v自拍,国产午夜片在线观看,婷婷成人亚洲综合国产麻豆,久久综合给合久久狠狠狠9

  • <output id="e9wm2"></output>
    <s id="e9wm2"><nobr id="e9wm2"><ins id="e9wm2"></ins></nobr></s>

    • 分享

      nio通道(1)----通道基礎(chǔ)接口

       碧海山城 2012-08-22

      1           Channel

        數(shù)據(jù)的源頭或者數(shù)據(jù)的目的地
       
      用于向 buffer 提供數(shù)據(jù)或者讀取 buffer 數(shù)據(jù) ,buffer 對(duì)象的唯一接口。
       
      異步 I/O 支持--  包含socket,filepipe三種管道,都是全雙工的通道。
       

       
       
       
       
      2          
      通道基礎(chǔ)

      2.1      基本接口

       

      基礎(chǔ)的通道接口只有兩個(gè)方法,判斷通道是否開(kāi)啟,以及關(guān)閉通道

       

      2.2    和寫(xiě)

      ReadableByteChannelWritableByteChannel定義了通道基本都是基于ByteBuffer操作的

      ByteChannel繼承了前面兩個(gè),因此一般可以被用來(lái)實(shí)現(xiàn)可讀可寫(xiě)的通道

      public interface ByteChannel

          extends ReadableByteChannel, WritableByteChannel

      {

      } 

      有些注意點(diǎn),請(qǐng)看 nio通道(2)的幾個(gè)注意點(diǎn)

      2.3      阻塞與非阻塞

      SelectableChannel表明了通道是支持有條件的選擇,即Selector,和非阻塞結(jié)合就可以實(shí)現(xiàn)多路復(fù)用的

      通道可以以阻塞(blocking)或非阻塞(nonblocking )模式運(yùn)行。非阻塞模式的通道永遠(yuǎn)不會(huì)讓調(diào)用的線(xiàn)程休眠。請(qǐng)求的操作要么立即完成,要么返回一個(gè)結(jié)果表明未進(jìn)行任何操作。只有面向流的(stream -oriented)的通道,如 sockets pipes才能使用非阻塞模式,將非阻塞 

      2.4    可中斷與不可中斷

      如果一個(gè)通道實(shí)現(xiàn)了Interrupted接口,那么,當(dāng)他被阻塞,并且發(fā)生中斷的時(shí)候,那么該通道將會(huì)被中斷,線(xiàn)程會(huì)拋出一個(gè)ClosedByInterruptException異常,如果一個(gè)線(xiàn)程的狀態(tài)是中斷,他試圖訪(fǎng)問(wèn)一個(gè)通道,那么通道將立即被關(guān)閉

       

      2.5    ScatterGather

      簡(jiǎn)單的說(shuō)就是可以將讀取的數(shù)據(jù)填充到對(duì)個(gè)緩沖區(qū),將多個(gè)緩沖區(qū)的數(shù)據(jù)一次寫(xiě)出,號(hào)稱(chēng)和Direct內(nèi)存結(jié)合性能會(huì)很不錯(cuò),還沒(méi)能力考證...

       

      1.對(duì)于寫(xiě)入,一般的框架在,都是在寫(xiě)完一段數(shù)據(jù),就給一個(gè)事件,表明寫(xiě)完,這種場(chǎng)景下Gather的作用就不大了,不過(guò)如果能夠接受批量寫(xiě)的話(huà)(比如每次寫(xiě)10段數(shù)據(jù),寫(xiě)完以后一段段通知),那也許可以試試

       

      2.對(duì)于讀取,感覺(jué)作用不是很大,把headbody分到兩個(gè)ByteBuffer里和一個(gè)ByteBuffer里有毛區(qū)別?

       

      參考

      NIO - Scatter/Gather
      Java NIO Scatter / Gather

       

      2.6      打開(kāi)通道(文件/Socket)

       

      從廣義IO角度來(lái)說(shuō),有兩大類(lèi):File IOStream IO,因此通道也大致有兩類(lèi),FileChannel和套接字(Socket)通道,包括SocketChannel、ServerSocketChannelDatagramChannel,Socket通過(guò)可以直接通過(guò)工廠方法創(chuàng)建,但是一個(gè)FileChannel只能通過(guò)一個(gè)打開(kāi)的RandomAccessFile、FileInputStream、FileOutputStream對(duì)象上調(diào)用getChannel方法來(lái)獲取

       

      SocketChannel sc = SocketChannel.open( );
      sc.connect (new InetSocketAddress ("somehost", someport)); 


      ServerSocketChannel ssc = ServerSocketChannel.open( );
      ssc.socket( ).bind (new InetSocketAddress (somelocalport));

       

      DatagramChannel dc = DatagramChannel.open( );

      =======================================================

      RandomAccessFile raf = new RandomAccessFile ("somefile", "r");

      FileChannel fc = raf.getChannel( );

      2.7      使用通道(特性和IO實(shí)例相關(guān))

       

      通道可以使單向的或者雙向的,即只讀/只寫(xiě)/可讀可寫(xiě)

      對(duì)于每個(gè)File或者Scoket通道來(lái)說(shuō),都是雙向的,對(duì)于Socket不是我關(guān)心,因?yàn)樗旧砭褪请p向的,但是對(duì)于File,可以在不同的時(shí)候以不同的權(quán)限打開(kāi),因此Read-only打開(kāi)的文件調(diào)用write方法時(shí)候會(huì)拋出NonWriteChannelException,通道會(huì)連接一個(gè)通道實(shí)例(channel instance),具體的屬性受該實(shí)例的限制,比如文件沒(méi)有寫(xiě)權(quán)限,但是可能有write方法。


        本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶(hù)發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買(mǎi)等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
        轉(zhuǎn)藏 分享 獻(xiàn)花(0

        0條評(píng)論

        發(fā)表

        請(qǐng)遵守用戶(hù) 評(píng)論公約

        類(lèi)似文章 更多