Java NIO SocketChannel是一個連接tcp 協(xié)議的socket的channel。跟以前的java 網(wǎng)絡(luò)socket是一樣的隅熙,有兩個方式去創(chuàng)建稽煤。
1)連接一個服務(wù)端,打開一個SocketChannel
2)當(dāng)一個連接抵達(dá)ServerSocketChannel囚戚,SocketChannel可以被創(chuàng)建
打開SocketChannel
SocketChannel socketChannel = SocketChannel.open();
socketChannel.connect(new InetSocketAddress("http://jenkov.com", 80));
關(guān)閉SocketChannel
socketChannel.close();
?從SocketChannel讀
ByteBuffer buf = ByteBuffer.allocate(48);
int bytesRead = socketChannel.read(buf);
read方法讀取數(shù)據(jù)從channel到buffer酵熙,返回值表示多少個數(shù)據(jù)讀到buffer里面了,如果返回-1驰坊,代表流已經(jīng)讀取到頭了匾二,或者連接關(guān)閉了。
向SocketChannel中寫
注意write方法是在一個循環(huán)內(nèi)部的.拳芙。因?yàn)闊o法保證有多少個數(shù)據(jù)寫到Channel中察藐,所以不斷重復(fù)直到buffer中沒有要寫的數(shù)據(jù)了。
非阻塞模式
你可以 設(shè)置SocketChannel為非阻塞模式舟扎,設(shè)置之后分飞,調(diào)用connect()、read()睹限、write()方法在異步模式下譬猫。