Bio演变的NIO的过程
Bio是一个阻塞式的io,不能够支持并发请求访问;可以多线程优化代码
这种方式也存在缺点:如果每个请求过来都使用一个线程,这时候非常浪费CPU的资源。
所以在网络编程服务器中,是否使用单线程提高响应的效率问题,所以nio出现;
public class ServerTcpSocket {
static byte[] bytes = new byte[1024];
public static void main(String[] args) {
ExecutorService executorService = Executors.newCachedThreadPool(); try {
// 1.创建一个ServerSocket连接 final ServerSocket serverSocket = new ServerSocket(); // 2.绑定端口号 serverSocket.bind(new InetSocketAddress(8080)); // 3.当前线程放弃cpu资源等待获取数据 System.out.println("等待获取数据..."); while (true) {
final Socket socket = serverSocket.accept(); executorService.execute(new Runnable() {
public void run() {
try {
System.out.println("获取到数据..."); // 4.读取数据 int read = socket.getInputStream().read(bytes); String result = new String(bytes); System.out.println(result); } catch (Exception e) {
} } });
} } catch (Exception e) {
} } } |
NIO非阻塞式代码
public class ServerNioTcpSocket {
static ByteBuffer byteBuffer = ByteBuffer.allocate(512);
public static void main(String[] args) {
try {
// 1.创建一个ServerSocketChannel连接 final ServerSocketChannel serverSocketChann |