`
whao189
  • 浏览: 123216 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

创建非阻塞的Socket服务器<二>

阅读更多
今天在公交车上遇到了扒手!司机提示了好多次说“请注意扒手”,我猜想司机一定看到了"熟悉的面孔"所以才这么说的。。。结果不出所料,一个男同胞的手机被扒了,司机很恼怒,汗。。。算了不说了。。说了伤心,尽管不是我的手机被偷!

上一篇文章我对NIO的包进行全面的概括,下面我们就详细的讲讲这些类。

首先讲一下Buffer 这个类是一个抽象类,继承自Object!

这个类是缓冲区由于数据的输入和输出相对于其他的操作是很消耗资源的,而缓冲区正好可以帮助我们改善这些情况。
它从两个方面来提升效率:
减少对实际物理内存的频繁操作
缓冲区被创建就分配了内存,他能够被重用,而不至于让我们频繁的动态创建和回收。
Buffer这个类的作用就类似与BufferedInputStream 和 BufferedOutputStream BufferedRead
BufferedWriter.

来看看API 中 Buffer的具体方法和属性。
capacity //定义了缓冲区的容量,也就是可以保存多少数据
limit//定义了缓冲区的极限,当前缓冲区的终点
postion//读取的位置

那么怎么改变他们呢?
clear();//设置极限为容量 并把将要读取的位置设置为0
flip();//设置极限为位置,并把位置设置为0
rewind();//不修改极限,但把位置设置为0

前面已经提到,Buffer是一个抽象类所以他不能实例化,她有多个子类,每一种基本类型都有它对应的缓冲类但是boolean除外!此外还有就是ByteBuffer这个子类,它定义了存放数据的字节单元,但是他不能实例化只能通过静态方法来得到他的对象集体方法如下:
allocate(int capacity)//返回指定大小的缓冲区
allocateDirect(int capcaity)//返回新的缓冲区

以上两个方法我并没有找到具体的区别性能上也米有测试,希望做过研究的同学给说一下!
先说到这里。。心情不好!等我调整一下心情在写~


好了接着说其他的类,Charset 这个类

它包含的方法我们这里只需要记住两个就行了
encode(String str) //返回的是ByteBuffer  
decode(ByteBuffer bb)//返回的是CharBuffer

不管是ByteBuffer 还是CharBuffer 都是Buffer的子类。那么推测Buffer的另一种用途就是帮助这些基本类型之间进行转换,我们可以按照指定的形式来转换自己的数据!




















分享到:
评论

相关推荐

    完成端口(IOCP) 服务器源码

    1. 创建服务器socket, 并将socket设置为非阻塞模式 2. bind()绑定IP地此与端口 3. listen() 4. 创建IO完成端口,将socket绑定到IO完成端口上 5. 根据当前机器CPU个数创建工作者线程池 6. 使用AcceptEx()提前创建...

    tcp服务器客户端demo

    在程序启动时候创建一个工作模式的代理来区分是否启动服务器以及是阻塞方式还是非阻塞方式 在WorkModeProxy中根据配置决定使用Socket的类型,以及工作模式的类型 支持使用不同的socket,可以通过SocketFactory进行...

    python实现单线程多任务非阻塞TCP服务端

    创建服务器socket sock = socket(AF_INET, SOCK_STREAM) # 2.绑定主机和端口 addr = ('', 7788) # sock.bind(addr) # 3. 设置最大监听数目,并发 sock.listen(10) # 4. 设置成非阻塞 sock.setblocking(False) # 保存...

    (牛客网C++课程)Linux 高并发Web服务器项目实战(带定时检测代码)

    1. 线程池 + 非阻塞 socket + epoll + 事件处理的并发模型 2. 状态机解析HTTP请求 3. 心跳机制 4. 简易日志系统 主要内容: 1. 使用 socket 实现服务器和浏览器客户端的通信; 2. 用 epoll 事件检测技术实现 IO 多...

    Python实现的服务器示例小结【单进程、多进程、多线程、非阻塞式】

    本文实例讲述了Python实现的服务器。分享给大家供大家参考,具体如下: python – 单进程服务器 #coding=utf-8 from socket import * #创建套接字 serSocket = socket(AF_INET, SOCK_STREAM) #重复使用绑定信息 ...

    MFC网络编程之自制浏览器

    网络编程,当然要用到Windows Socket(套接字)技术。Socket相关的操作由一系列...因此,建议初学者学习编网络通信程序时,暂且不要用MFC提供的类,而先用Winsock2 API,这样有助于对异步、非阻塞Socket编程机制的理解。

    高性能IO模型浅析

    (2)同步非阻塞IO(Non-blocking IO):默认创建的socket都是阻塞的,非阻塞IO要求socket被设置为NONBLOCK。注意这里所说的NIO并非Java的NIO(New IO)库。 (3)IO多路复用(IO Multiplexing):即经典的Reactor...

    服务器概要设计说明.docx

    Windows下有五种非阻塞I/O模型:选择〔Select〕、异步选择〔WSAAsyncSelect〕、事件选择〔WSAEventSelect〕、重叠I/O〔Overlapped I/O〕和完成端服务器概要设计说明全文共5页,当前为第2页。服务器概要设计说明全文...

    Linux高性能服务器编程

    9.3 epoll系列系统调用 9.3.1 内核事件表 9.3.2 epoll_wait函数 9.3.3 LT和ET模式 9.3.4 EPOLLONESHOT事件 9.4 三组IO复用函数的比较 9.5 IO复用的高级应用一:非阻塞connect 9.6 IO复用的高级应用二:...

    Tomcat面试专题及答案.pdf

    nio:JDK1.4 开始支持,同步阻塞或同步非阻塞 IO。 指定使用 NIO 模型来接受 HTTP 请求 protocol=”org.apache.coyote.http11.Http11NioProtocol” 指定使用 NIO 模型 来接受 HTTP 请求。默认是 BlockingIO,配置为 ...

    Java网络编程(第三版)中文版.part11.rar

    第十二章 非阻塞I/O 391 一个示例客户端 392 一个示例服务器 396 缓冲区 402 通道 421 就绪选择 427 第十三章 UDP数据报和Socket 431 UDP协议 431 DatagramPacket类 433 DatagramSocket类 442 一些有用的...

    Java网络编程(第三版)高清中文版.part01.rar

    第十二章 非阻塞I/O 391 一个示例客户端 392 一个示例服务器 396 缓冲区 402 通道 421 就绪选择 427 第十三章 UDP数据报和Socket 431 UDP协议 431 DatagramPacket类 433 DatagramSocket类 442 一些有用的...

    Java网络编程(第三版)中文版.part06.rar

    第十二章 非阻塞I/O 391 一个示例客户端 392 一个示例服务器 396 缓冲区 402 通道 421 就绪选择 427 第十三章 UDP数据报和Socket 431 UDP协议 431 DatagramPacket类 433 DatagramSocket类 442 一些有用的...

    Java网络编程(第三版)中文版.part07.rar

    第十二章 非阻塞I/O 391 一个示例客户端 392 一个示例服务器 396 缓冲区 402 通道 421 就绪选择 427 第十三章 UDP数据报和Socket 431 UDP协议 431 DatagramPacket类 433 DatagramSocket类 442 一些有用的...

    Java网络编程(第三版)中文版.part09.rar

    第十二章 非阻塞I/O 391 一个示例客户端 392 一个示例服务器 396 缓冲区 402 通道 421 就绪选择 427 第十三章 UDP数据报和Socket 431 UDP协议 431 DatagramPacket类 433 DatagramSocket类 442 一些有用的...

    Java网络编程(第三版)中文版.part01.rar

    第十二章 非阻塞I/O 391 一个示例客户端 392 一个示例服务器 396 缓冲区 402 通道 421 就绪选择 427 第十三章 UDP数据报和Socket 431 UDP协议 431 DatagramPacket类 433 DatagramSocket类 442 一些有用的...

    Java网络编程(第三版)中文版.part03.rar

    第十二章 非阻塞I/O 391 一个示例客户端 392 一个示例服务器 396 缓冲区 402 通道 421 就绪选择 427 第十三章 UDP数据报和Socket 431 UDP协议 431 DatagramPacket类 433 DatagramSocket类 442 一些有用的...

    Java网络编程(第三版)中文版.part04.rar

    第十二章 非阻塞I/O 391 一个示例客户端 392 一个示例服务器 396 缓冲区 402 通道 421 就绪选择 427 第十三章 UDP数据报和Socket 431 UDP协议 431 DatagramPacket类 433 DatagramSocket类 442 一些有用的...

    Java网络编程(第三版)中文版.part02.rar

    第十二章 非阻塞I/O 391 一个示例客户端 392 一个示例服务器 396 缓冲区 402 通道 421 就绪选择 427 第十三章 UDP数据报和Socket 431 UDP协议 431 DatagramPacket类 433 DatagramSocket类 442 一些有用的...

Global site tag (gtag.js) - Google Analytics