当前位置: 首页 > news >正文

南通做网站公司备案备公司名跟网站名

南通做网站公司,备案备公司名跟网站名,电商购物,丰台广州网站建设BIO(Blocking I/O)、NIO(Non-blocking I/O)和AIO(Asynchronous I/O)是Java中用于处理I/O操作的三种不同的编程模型. BIO适用于连接数较少的情况,NIO适用于连接数较多但连接活跃度不高的情况&…

BIO(Blocking I/O)、NIO(Non-blocking I/O)和AIO(Asynchronous I/O)是Java中用于处理I/O操作的三种不同的编程模型.

BIO适用于连接数较少的情况,NIO适用于连接数较多但连接活跃度不高的情况,而AIO适用于连接数较多且连接活跃度较高的情况。选择合适的I/O模型取决于具体的应用场景和性能要求。

以下是他们的各自介绍以及代码示例

  1. BIO(Blocking I/O)
    • 同步阻塞I/O模型,传统的I/O模型。
    • 每个I/O操作都会阻塞当前线程,直到数据读取完成或写入完成。
    • 适用于连接数较少且固定的场景,简单易用。

代码示例:

import java.io.*;
import java.net.ServerSocket;
import java.net.Socket;public class BIOServer {public static void main(String[] args) throws IOException {ServerSocket serverSocket = new ServerSocket(8888);System.out.println("BIO Server started on port 8888");while (true) {Socket socket = serverSocket.accept();System.out.println("Accepted connection from " + socket);BufferedReader reader = new BufferedReader(new InputStreamReader(socket.getInputStream()));BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream()));String message = reader.readLine();System.out.println("Received message: " + message);writer.write("Hello, client!\n");writer.flush();socket.close();}}
}
  1. NIO(Non-blocking I/O)
    • 同步非阻塞I/O模型,提供了Channel和Buffer的概念。
    • 可以使用单线程处理多个连接,提高了I/O的效率。
    • 可以实现多路复用(Selector)来处理多个通道的I/O操作。

代码示例:

import java.io.IOException;
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 NIOServer {public static void main(String[] args) throws IOException {ServerSocketChannel serverSocketChannel = ServerSocketChannel.open();serverSocketChannel.bind(new InetSocketAddress(8888));serverSocketChannel.configureBlocking(false);Selector selector = Selector.open();serverSocketChannel.register(selector, SelectionKey.OP_ACCEPT);System.out.println("NIO Server started on port 8888");while (true) {selector.select();Set<SelectionKey> selectedKeys = selector.selectedKeys();Iterator<SelectionKey> keyIterator = selectedKeys.iterator();while (keyIterator.hasNext()) {SelectionKey key = keyIterator.next();if (key.isAcceptable()) {ServerSocketChannel serverChannel = (ServerSocketChannel) key.channel();SocketChannel socketChannel = serverChannel.accept();socketChannel.configureBlocking(false);socketChannel.register(selector, SelectionKey.OP_READ);System.out.println("Accepted connection from " + socketChannel);} else if (key.isReadable()) {SocketChannel socketChannel = (SocketChannel) key.channel();ByteBuffer buffer = ByteBuffer.allocate(1024);socketChannel.read(buffer);buffer.flip();String message = new String(buffer.array()).trim();System.out.println("Received message: " + message);socketChannel.register(selector, SelectionKey.OP_WRITE);} else if (key.isWritable()) {SocketChannel socketChannel = (SocketChannel) key.channel();ByteBuffer buffer = ByteBuffer.wrap("Hello, client!\n".getBytes());socketChannel.write(buffer);socketChannel.close();System.out.println("Message sent to client");}keyIterator.remove();}}}
}
  1. AIO(Asynchronous I/O)
    • 异步非阻塞I/O模型,提供了异步的I/O操作方式。
    • 使用异步通道(AsynchronousChannel)来处理I/O操作,可以在完成之前继续做其他事情。
    • 适用于连接数较多且连接活跃度较高的场景,如聊天服务器、网络爬虫等。

代码示例:

import java.io.IOException;
import java.net.InetSocketAddress;
import java.nio.ByteBuffer;
import java.nio.channels.AsynchronousServerSocketChannel;
import java.nio.channels.AsynchronousSocketChannel;
import java.nio.channels.CompletionHandler;public class AIOServer {public static void main(String[] args) throws IOException, InterruptedException {AsynchronousServerSocketChannel serverChannel = AsynchronousServerSocketChannel.open();serverChannel.bind(new InetSocketAddress(8888));System.out.println("AIO Server started on port 8888");serverChannel.accept(null, new CompletionHandler<AsynchronousSocketChannel, Void>() {public void completed(AsynchronousSocketChannel socketChannel, Void attachment) {serverChannel.accept(null, this);ByteBuffer buffer = ByteBuffer.allocate(1024);socketChannel.read(buffer, buffer, new CompletionHandler<Integer, ByteBuffer>() {public void completed(Integer result, ByteBuffer buffer) {buffer.flip();String message = new String(buffer.array()).trim();System.out.println("Received message: " + message);ByteBuffer responseBuffer = ByteBuffer.wrap("Hello, client!\n".getBytes());socketChannel.write(responseBuffer, responseBuffer, new CompletionHandler<Integer, ByteBuffer>() {public void completed(Integer result, ByteBuffer buffer) {try {socketChannel.close();} catch (IOException e) {e.printStackTrace();}System.out.println("Message sent to client");}public void failed(Throwable exc, ByteBuffer buffer) {exc.printStackTrace();}});}public void failed(Throwable exc, ByteBuffer buffer) {exc.printStackTrace();}});}public void failed(Throwable exc, Void attachment) {exc.printStackTrace();}});Thread.sleep(Integer.MAX_VALUE);}
}

这些示例演示了如何使用Java的BIO、NIO和AIO来实现简单的Socket通信。 BIO使用阻塞I/O模型,NIO使用非阻塞I/O模型,AIO使用异步I/O模型。

http://www.yayakq.cn/news/739967/

相关文章:

  • 苏州网站推广建设黄骅港船舶动态查询平台
  • 网站建设公司河南郑州北京快三彩票app平台官网下载
  • 厦门建设银行招聘网站wordpress pitch
  • 北京网站制作公司清远简历模板免费下载wps可编辑
  • 山西省城乡建设厅网站网站 cms
  • 广东城乡住房建设厅网站网站运营成功案例
  • ipo和seoseo系统
  • 网站开发中为什么有两个控制层网站主体备案信息查询
  • 金融直播间网站建设wordpress pdf 免费
  • 太原建站模板系统黄冈市建设局官方网站
  • 万网公司注册网站wix做的网站能扒下来
  • 自己做游戏网站学什么wordpress 注册邮件
  • 如何把优酷视频放到网站上北京建设集团招聘信息网站
  • 中国查公司的网站北京信息发布平台
  • 广西 南宁 微信微网站开发宜昌教育培训网站建设
  • 竞价在什么网站上做公司请做网站
  • 微网站建设cwordpress 主机搬家
  • 代做道具网站专做民宿预定的网站
  • 网站开发毕业设计文档佛山市网站开发
  • 园林工建设有限公司网站最近刚发生的新闻
  • wordpress 企业站无锡游戏网站建设公司
  • 一站式服务平台登录常州app网站
  • 备案 几个网站免费网站开发
  • 传奇发布网站排行五金网站模板
  • 做一个网站要多长时间如何入侵网站后台
  • 网站修改思路wordpress网站安装
  • 网站空间租赁合同网站建设黄页在线免费
  • 网站建设及推广套餐武邑县建设局网站
  • 网站建设打造营销型网站网站怎么做转发
  • 兰州网站中国最大的互联网公司排名