美文网首页
Java I/O系统(2)——网络通信

Java I/O系统(2)——网络通信

作者: DaemonXiao | 来源:发表于2019-05-16 21:49 被阅读0次

BIO网络模型

BIO网络模型.png
BIO网络模型中,服务端在没接收到一个客户端的连接请求后都会建立一个新的线程去监听客户端,在高并发的网络环境下,就会导致建立大量的线程,最终导致性能瓶颈甚至服务器崩溃。
缺点:阻塞式I/O模型、弹性伸缩能力差、多线程资源消耗大。

NIO网络模型

NIO网络模型.png
NIO网络模型优点:非阻塞I/O模型、弹性伸缩能力强、单线程节省资源。
在之前的Java I/O系统中已经介绍了NIO的三个关键组件:Channel、Buffer、Selector,接下来,再将将它们在网络编程中的应用。

Channel

Channel是信息传输的通道,具有双向性、非阻塞性、操作唯一性。其中操作唯一性是指NIO中只能使用Buffer操作Channel。
JDK中有四个关键的实现类:1. 文件类 FileChannel、2. UDP类 DatagramChannel、3. TCP类:ServerSocketChannel/SocketChannel。

//1. 服务器端打开ServerSocketChannel
ServerSocketChannel serverSocketChannel = ServerSocketChannel.open();

//2. 服务器端绑定8080端口
serverSocketChannel.bind(new InetSocketAddress(8080));

//3. 服务器端监听端口,当收到请求时,返回SocketChannel实例
SocketChannel socketChannel = serverSocketChannel.accept();

//4. 客户端的请求代码
SocketChannel socketChannel = SocketChannel.open(new InetSocketAddress("127.0.0.1", 8080));

发现上述代码和BIO的TCP建立十分类似。

Buffer

Buffer的作用就是从Channel交换数据,它在本质上是一块swap内存。
Buffer的四个重要属性:Capacity、Position、Limit、Mark。
其简单使用方法在(1)中讲过,这里不再赘述。

Selector

Selector,选择器又称多路复用器,是NIO网络编程的基础,其作用是I/O就绪选择。

//1. 创建Selector
Selelctor slector =  Selector.open();

//2. 将channel注册到Selector上,监听就绪事件
SelectionKey selectionKey = channel.register(Selector, SelectionKey.OP_Read);

//3. 阻塞等待就绪事件发生
int selectNum = selector.select();

//4. 获取发生就绪事件的channel集合
Set<SelectionKey> selectedKeys = selector.selectedKeys();

SelectionKey是一个静态常量,它提供了四种就绪状态常量,分别是connect、except、read、write。在调用selector.selelctedKeys() 方法时,会返回一个SelectionKey的集合

相关文章

  • Java I/O系统(2)——网络通信

    BIO网络模型 NIO网络模型 Channel Channel是信息传输的通道,具有双向性、非阻塞性、操作唯一性。...

  • Java I/O 系统

    所谓 I/O 指的是输入输出,输入输出的一端是内存(RAM),另一端可以是文件系统中的文件、网络中的数据或者标准输...

  • Java I/O系统

    1 输入和输出 Java类库中的I/O类分成输入和输出两部分,通过叠合多个对象来提供所期望的功能(装饰者设计模式)...

  • Java I/O系统

    存在各种不同的I/O来源端和目的端(文件、控制台、网络),不但希望让它们可以通信,而且还要以多种不同方式来和它们通...

  • Java I/O体系从原理到应用,这一篇全说清楚了

    本文介绍操作系统I/O工作原理,Java I/O设计,基本使用,开源项目中实现高性能I/O常见方法和实现,彻底搞懂...

  • Java当中的IO.(1)

    java io系统,用了一个很巧妙的设计模式.1.I/O操作的目标.2.I/O的分类方法.3.读取文件和写入文件的...

  • NIO异步实现读写

    NIO 库是在 JDK 1.4 中引入的。在Java1.4之前的I/O系统中,提供的都是面向流的I/O系统,NIO...

  • Java-I/O系统

    对程序语言的设计者来说,创建一个好的输出/输入(I/O)系统是一项艰难的任务。——《Thinking in Jav...

  • java基础——IO

    I/O作为作为人机交互的核心问题,很多web应用系统的瓶颈都是I/O瓶颈。本文主要总结java的I/O类库基本架构...

  • 第六章 设备管理1

    一、I/O系统的功能、模型和接口 1、基本任务: 1)完成用户提出的I/O请求, 2)提高I/O速率、改善I/O设...

网友评论

      本文标题:Java I/O系统(2)——网络通信

      本文链接:https://www.haomeiwen.com/subject/yrpiaqtx.html