Java IO体系

一、常见I/O
(1)基于字节的IO操作
这里写图片描述
这里写图片描述
(2)基于字符的IO操作
这里写图片描述
这里写图片描述
(3)总结IO操作
这里写图片描述
这里写图片描述
二、NIO
这里写图片描述
这里写图片描述
举例:
(1)服务器

package Selector;

import java.net.InetSocketAddress;
import java.nio.ByteBuffer;
import java.nio.channels.SelectionKey;
import java.nio.channels.Selector;
import java.nio.channels.ServerSocketChannel;
import java.nio.channels.SocketChannel;
import java.util.Iterator;
import java.util.Set;

public class ServerNIO {

    public static void main(String[]args){

        try{
            ServerSocketChannel ssc=ServerSocketChannel.open();
            ssc.socket().bind(new InetSocketAddress("127.0.0.1",8000));
            ssc.configureBlocking(false);

            Selector selector=Selector.open(); //选择器
            //注册channel
            ssc.register(selector,SelectionKey.OP_ACCEPT);
            ByteBuffer readBuff=ByteBuffer.allocate(1024);
            ByteBuffer writeBuff=ByteBuffer.allocate(128);
            writeBuff.put("Received".getBytes());
            writeBuff.flip();

            while(true){
                 Set<SelectionKey>keys=selector.selectedKeys();
                 Iterator<SelectionKey>it=keys.iterator();
                 while(it.hasNext()){
                      SelectionKey key=it.next();
                      it.remove();
                      if(key.isAcceptable()){
                          SocketChannel socketChannel=ssc.accept();
                          socketChannel.configureBlocking(false);
                          socketChannel.register(selector, SelectionKey.OP_READ);

                      }else if(key.isReadable()){
                          SocketChannel socketChannel=(SocketChannel)key.channel();
                          readBuff.clear();
                          socketChannel.read(readBuff);
                          readBuff.flip();
                          System.out.println("Recieved:"+new String(readBuff.array()));
                          key.interestOps(SelectionKey.OP_WRITE);
                      }else if(key.isWritable()){
                          writeBuff.rewind();
                          SocketChannel socketChannel=(SocketChannel)key.channel();
                          socketChannel.write(writeBuff);
                          key.interestOps(SelectionKey.OP_READ);
                      }
                 }

            }
        }catch(Exception e){


        }

    }

}

(2)客户端

package Selector;
import java.net.InetSocketAddress;
import java.nio.ByteBuffer;
import java.nio.channels.SocketChannel;

public class ClientNIO {

    public static void main(String[]args){
          try{

               SocketChannel socketChannel=SocketChannel.open();
               socketChannel.connect(new InetSocketAddress("127.0.0.1",8000));
               ByteBuffer writeBuffer=ByteBuffer.allocate(32);
               ByteBuffer readBuffer=ByteBuffer.allocate(32);
               writeBuffer.put("Hello World".getBytes());
               writeBuffer.flip();
               while(true){
                    writeBuffer.rewind();
                    socketChannel.write(writeBuffer); //通道读数据
                    readBuffer.clear();
                    socketChannel.read(readBuffer);   //通道写数据
               }

          }catch(Exception e){

               System.out.println(e);
          }
    }
}

三、AIO
这里写图片描述
四、三者对比
这里写图片描述
参考

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值