flip java_java的flip(). 这里用flip()有什么作用?这是反转缓冲区的方法,好像用不上。...
publicclassNServer{//用于檢測所有Channel狀態的SelectorprivateSelectorselector=null;staticfinalintPORT=30000;privateCharsetcharset=Charset.forName("UTF-8");publicvoidinit(...
public class NServer
{
// 用于檢測所有Channel狀態的Selector
private Selector selector = null;
static final int PORT = 30000;
private Charset charset = Charset.forName("UTF-8");
public void init()throws IOException
{
selector = Selector.open();
// 通過open方法來打開一個未綁定的ServerSocketChannel實例
ServerSocketChannel server = ServerSocketChannel.open();
InetSocketAddress isa = new InetSocketAddress("127.0.0.1", PORT);
server.bind(isa);
// 設置ServerSocket以非阻塞方式工作
server.configureBlocking(false);
// 將server注冊到指定Selector對象
server.register(selector, SelectionKey.OP_ACCEPT);
while (selector.select() > 0)
{
for (SelectionKey sk : selector.selectedKeys())
{
// 從selector上的已選擇Key集中刪除正在處理的SelectionKey
selector.selectedKeys().remove(sk); //①
// 如果sk對應的Channel包含客戶端的連接請求
if (sk.isAcceptable()) //②
{
// 調用accept方法接受連接,產生服務器端的SocketChannel
SocketChannel sc = server.accept();
// 設置采用非阻塞模式
sc.configureBlocking(false);
// 將該SocketChannel也注冊到selector
sc.register(selector, SelectionKey.OP_READ);
// 將sk對應的Channel設置成準備接受其他請求
sk.interestOps(SelectionKey.OP_ACCEPT);
}
if (sk.isReadable()) //③
{
// 獲取該SelectionKey對應的Channel,該Channel中有可讀的數據
SocketChannel sc = (SocketChannel)sk.channel();
// 定義準備執行讀取數據的ByteBuffer
ByteBuffer buff = ByteBuffer.allocate(1024);
String content = "";
// 開始讀取數據
try
{
while(sc.read(buff) > 0)
{
buff.flip();
content += charset.decode(buff);
}
System.out.println("讀取的數據:" + content);
sk.interestOps(SelectionKey.OP_READ);
}
展開
總結
以上是生活随笔為你收集整理的flip java_java的flip(). 这里用flip()有什么作用?这是反转缓冲区的方法,好像用不上。...的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 巴菲特再次减持比亚迪:套现 2.03 亿
- 下一篇: 公安部:2022 年关闭 537 万个“