为什么说JAVA nio是非阻塞的 [问题点数:40分]

Bbs1
本版专家分:20
结帖率 91.11%
Bbs3
本版专家分:775
httpcore-nio-4.3.jar包
用Java实现非<em>阻塞</em>通信 ,用ServerSocket和Socket来编写服务器程序和客户程序,是Java网络编程的最基本的方式。 httpcore-<em>nio</em>-4.3.jar包
基于HTTP、NIO、多线程实现浏览器高并发非阻塞访问服务器文件
代码经过压力测试,采用反应器模式,没有第三方框架,实现功能:可以一个线程处理多个请求,也可以加上多线程。处理数据采用的多线程。实现功能:基于HTTP协议,解析请求和拼接响应,基于NIO的非<em>阻塞</em>,线程池,文件传输。代码有详细注释和清晰的框架。 程序入口是: /HttpServerReactor/src/com/StartServer.Java 访问1,浏览:http://localhost:8989/files/1.txt 访问2,下载:http://localhost:8989/files/2.zip 测试并发,可以先下载,再浏览。
java NIO教程
<em>java</em> NIO高清电子书,新的,无<em>阻塞</em>的IO,主要面向缓冲区的。
NIO框架Netty实现高性能高并发
Java异步NIO框架Netty实现高性能高并发无标题笔记 1. 背景 1.1. 惊人的性能数据 最近一个圈内朋友通过私信告诉我,通过使用Netty4 + Thrift压缩二进制编解码技术,他们实现了10W TPS(1K的复杂POJO对象)的跨 节点远程服务调用。相比于传统基于Java序列化+BIO(同步<em>阻塞</em>IO)的通信框架,性能提升了8倍多。 事实上,我对这个数据并不感到惊讶,根据我5年多的NIO编程经验,通过选择合适的NIO框架,加上高性能的压缩二进制编解码技术,精 心的设计Reactor线程模型,达到上述性能指标是完全有可能的。 下面我们就一起来看下Netty是如何支持10W TPS的跨节点远程服务调用的,在正式开始讲解之前,我们先简单介绍下Netty。
Java+NIO+(中文版).pdf
Java NIO深入探讨了1.4版的I/O新特性,并告诉您如何使用这些特性来极大地提升您所写的Java代码的执行效率。这本小册子就程序员所面临的有代表性的I/O问题作了详尽阐述,并讲解了如何才能充分利用新的I/O特性所提供的各种潜能。您将通过实例学会如何使用这些工具来解决现实工作中常常遇到的I/O问题,并了解这些新特性如何对响应速率、可伸缩性和可靠性产生直接影响。 NIO API是对1.3版I/O特性的补充而非取代,因此,何时使用新的API,何时老的1.3版I/O API更适合特定应用,也是您将学习的内容。
IO 流程图,逻辑思维图
IO是面向流的,数据只能从一端读取到另一端,不能随意读写。NIO则是面向缓冲区的,进行数据的操作更方便了 IO是<em>阻塞</em>的,既浪费服务器的性能,也增加了服务器的风险;而NIO<em>是非</em><em>阻塞</em>的。 NIO引入了IO多路复用器,效率上更高效了。
nio视频教程
<em>nio</em>视频教程<em>nio</em>视频教程<em>nio</em>视频教程<em>nio</em>视频教程<em>nio</em>视频教程<em>nio</em>视频教程<em>nio</em>视频教程 个人感觉还不错,可以看看
Java NIO详解及源码下载
博客地址:http://blog.csdn.net/u010156024/article/details/44310709 欢迎访问。 代码中详细讲述了Java io流和<em>nio</em>流的用法,可以参考学习。
《Java NIO》 (中文版)【完整书签版】.pdf
This title provides a complete introduction to this major improvement in the new 1.4 version of Java, the new Java.Nio package. It includes information missing from previous editions of Java that are critical to writing high-performance applications.
JAVA nio异步长连接服务端与客户端
JAVA.NIO 异步长连接客户端与服务端都有,大家可以看看,另不知道怎么样将客户端读取的BUFF后的数据进行处理可以给出修改吗?
Java NIO (中文版)
Java NIO 深入探讨了 1.4 版的 I/O 新特性,并告诉您如何使用这些特性来极大地提升您所写的 Java 代码的执行效率。这本小册子就程序员所面临的有代表性的 I/O 问题作了详尽阐述,并讲解了 如何才能充分利用新的 I/O 特性所提供的各种潜能。您将通过实例学会如何使用这些工具来解决现 实工作中常常遇到的 I/O 问题,并了解这些新特性如何对响应速率、可伸缩性和可靠性产生直接影 响。
Java IO NIO and NIO 2 无水印pdf
Java IO NIO and NIO 2 英文无水印pdf pdf所有页面使用FoxitReader和PDF-XChangeViewer测试都可以打开 本资源转载自网络,如有侵权,请联系上传者或csdn删除 本资源转载自网络,如有侵权,请联系上传者或csdn删除
客户端程序
这是一个socket的客户端,而且<em>是非</em><em>阻塞</em>的。
Java_NIO中文 高清完整版本
详细介绍关于 <em>java</em> <em>nio</em>, 以及在各种场景下的使用, 加深以后http2.0以及请求异步化的理解
java NIO 中文版
本书介绍了Java平台上的高级输入/输出,具体点说,就是使用Java 2标准版(J2SE)软件开发包(SDK)1.4及以后版本进行的输入/输出。J2SE 1.4版代号Merlin,包含可观的I/O新特性,对此我们将作详细论述。这些新的I/O特性主要包含在<em>java</em>.<em>nio</em>软件包及其子包中,并被命名为New I/O(NIO)。通过本书,您将学会如何使用这些令人兴奋的新特性来极大地提升Java应用程序的I/O效率。 <em>java</em> <em>nio</em> <em>java</em> <em>nio</em> <em>java</em> <em>nio</em> <em>java</em> <em>nio</em> <em>java</em> <em>nio</em> <em>java</em> <em>nio</em> <em>java</em> <em>nio</em> <em>java</em> <em>nio</em> <em>java</em> <em>nio</em> <em>java</em> <em>nio</em> <em>java</em> <em>nio</em> <em>java</em> <em>nio</em> <em>java</em> <em>nio</em> <em>java</em> <em>nio</em>.
JAVA NIO 按行读取大文件支持 GB级别-修正版
本类,是专门为了处理大文件,按行读取开发的类。 采用读文件的缓存 fbb 1024*5 行缓存 bb 256 字节 设计思想: 每次通过<em>nio</em>读取字节到 fbb中 然后对fbb自己中的内容进行行判断即 10 回车 13 行号 0 文件结束 这样字节的判断,然后 返回行 如果 到达 fbb的结尾 还没有结束,就再通过<em>nio</em>读取一段字节,继续处理。 由于对于本程序 116个字节以上的行才有意义,所以 在next实现方法中,有对 116 长度的判断,否则返回 null 修正了之前版本中的问题: 修正后的方法 private int readByte() throws IOException{ fbb.rewind(); fbb.clear(); if(this.fc.read(fbb)==-1){ EOF=true; return 0;}else{ fbb.flip(); return fbb.limit(); } } 把 fbb.position() 改成 fbb.limit()
JAVA NIO 按行读取大文件,支持 GB级别
本类,是专门为了处理大文件,按行读取开发的类。 采用读文件的缓存 fbb 1024*5 行缓存 bb 256 字节 设计思想: 每次通过<em>nio</em>读取字节到 fbb中 然后对fbb自己中的内容进行行判断即 10 回车 13 行号 0 文件结束 这样字节的判断,然后 返回行 如果 到达 fbb的结尾 还没有结束,就再通过<em>nio</em>读取一段字节,继续处理。 由于对于本程序 116个字节以上的行才有意义,所以 在next实现方法中,有对 116 长度的判断,否则返回 null
尚硅谷NIO百度云链接
尚硅谷NIO百度云链接
JavaNIOpdf书籍
JavaNIO书籍,很全面,可供IT技术人员以及正在学习的同学提供学习资料,好好珍惜。
Java NIO中文版 pdf+world,高清带书签
Java NIO的中文翻译版本,高清带书签pdf,另外还有转换成了world版。详细简述了Java NIO的原理,学Java必看
Java IO, NIO and NIO.2(Apress,2015)
Java I/O, NIO, and NIO.2 is a power-packed book that accelerates your mastery of Java's various I/O APIs. In this book, you'll learn about classic I/O APIs (File, RandomAccessFile, the stream classes and related types, and the reader/writer classes). Next, you'll learn about NIO's buffer, channel, selector, regular expression, charset, and formatter APIs. Finally, you'll discover NIO.2's offerings in terms of an improved file system interface, asynchronous I/O, and the completion of socket channel functionality. After reading and using thi book, you'll gain the accelerated knowledge and skill level to really build applications with efficient data access, especially for today's cloud computing streaming data needs.
Java NIO 中英文版 + Pro Java 7 NIO.2
Java NIO,Ron Hitchens 著,中文版 裴小星 译,Pro Java 7 NIO.2,Anghel Leonard 著,pdf文字版带书签,无安全限制
Java IO, NIO and NIO.2 原版pdf by Friesen
Input/output (I/O) is not a sexy subject, but it’s an important part of non-trivial applications. This book introduces you to most of Java’s I/O capabilities as of Java 8 update 51. Chapter 1 presents a broad overview of I/O in terms of Java’s classic I/O, New I/O (NIO), and NIO.2 categories. You learn what each category offers in terms of its capabilities, and you also learn about concepts such as paths and Direct Memory Access. Chapters 2 through 5 cover classic I/O APIs. You learn about the File and RandomAccessFile classes along with streams (including object serialization and externalization) and writers/readers. Chapters 6 through 11 focus on NIO. You explore buffers, channels, selectors, regular expressions, charsets, and formatters. (Formatters were not introduced with the other NIO types in Java 1.4 because they depend on the variable arguments capability that was introduced in Java 5.) NIO is missing several features, which were subsequently provided by NIO.2. Chapters 12 through 14 cover NIO.2’s improved file system interface, asynchronous I/O, and the completion of socket channel functionality. Each chapter ends with assorted exercises that are designed to help you master its content. Along with long answers and true/false questions, you are often confronted with programming exercises. Appendix A provides the answers and solutions. Appendix B provides a tutorial on sockets and network interfaces. Although not directly related to classic I/O, NIO, and NIO.2, they leverage I/O capabilities and are mentioned elsewhere in this book.
高性能网络编程必备技能之IO与NIO阻塞分析
高性能网络编程必备技能之IO与NIO<em>阻塞</em>分析..................
尚硅谷Java视频_NIO 视频教程
 ·00. 尚硅谷__NIO__源码、课件 ·01. 尚硅谷_NIO_NIO 与 IO 区别  ·02. 尚硅谷_NIO_缓冲区(Buffer)的数据存取  ·03. 尚硅谷_NIO_直接缓冲区与非直接缓冲区  ·04. 尚硅谷_NIO_通道(Channel)的原理与获取  ·05. 尚硅谷_NIO_通道的数据传输与内存映射文件  ·06. 尚硅谷_NIO_分散读取与聚集写入  ·07. 尚硅谷_NIO_字符集 Charset  ·08. 尚硅谷_NIO_<em>阻塞</em>与非<em>阻塞</em>  ·09. 尚硅谷_NIO_<em>阻塞</em>式  ·10. 尚硅谷_NIO_非<em>阻塞</em>式  ·11. 尚硅谷_NIO_DatagramChannel  ·12. 尚硅谷_NIO_Pipe 管道
JAVA_IO/NIO(demo,压缩jar文件)
io/<em>nio</em>各种文件读写方法。文件压缩成jar包。
《Java NIO》Download Url
博文链接:https://yzhm.iteye.com/blog/70419
Java NIO英文高清原版
Java NIO英文高清原版
JavaIO和NIO练习
JavaIO和NIO练习,主要是依据新旧JavaIO所写的一个输出输入流的Demo
阻塞TCPServer
里面用的是ServerSocketChannel 替代ServerSocket ,ServerSocketChannel包括两种方式 一种是<em>阻塞</em> 另一种<em>是非</em><em>阻塞</em>的。
基于java NIO的socket通信demo
<em>java</em> NIO 创建的服务端,能够异步响应客户端的请求,客户端采用<em>nio</em>异步请求服务端,通信之间的乱码使用charset解决
java NIO和java并发编程的书籍
<em>java</em> NIO和<em>java</em>并发编程的书籍<em>java</em> NIO和<em>java</em>并发编程的书籍<em>java</em> NIO和<em>java</em>并发编程的书籍<em>java</em> NIO和<em>java</em>并发编程的书籍<em>java</em> NIO和<em>java</em>并发编程的书籍<em>java</em> NIO和<em>java</em>并发编程的书籍<em>java</em> NIO和<em>java</em>并发编程的书籍<em>java</em> NIO和<em>java</em>并发编程的书籍<em>java</em> NIO和<em>java</em>并发编程的书籍<em>java</em> NIO和<em>java</em>并发编程的书籍<em>java</em> NIO和<em>java</em>并发编程的书籍<em>java</em> NIO和<em>java</em>并发编程的书籍<em>java</em> NIO和<em>java</em>并发编程的书籍<em>java</em> NIO和<em>java</em>并发编程的书籍<em>java</em> NIO和<em>java</em>并发编程的书籍<em>java</em> NIO和<em>java</em>并发编程的书籍<em>java</em> NIO和<em>java</em>并发编程的书籍<em>java</em> NIO和<em>java</em>并发编程的书籍<em>java</em> NIO和<em>java</em>并发编程的书籍
java nio.pdf
<em>java</em> <em>nio</em>. <em>java</em> <em>nio</em>.pdf<em>java</em> <em>nio</em>.pdf<em>java</em> <em>nio</em>.pdf<em>java</em> <em>nio</em>.pdf<em>java</em> <em>nio</em>.pdf<em>java</em> <em>nio</em>.pdf<em>java</em> <em>nio</em>.pdf<em>java</em> <em>nio</em>.pdf<em>java</em> <em>nio</em>.pdf<em>java</em> <em>nio</em>.pdf<em>java</em> <em>nio</em>.pdf<em>java</em> <em>nio</em>.pdf<em>java</em> <em>nio</em>.pdf<em>java</em> <em>nio</em>.pdf<em>java</em> <em>nio</em>.pdf<em>java</em> <em>nio</em>.pdf<em>java</em> <em>nio</em>.pdf<em>java</em> <em>nio</em>.pdf<em>java</em> <em>nio</em>.pdf<em>java</em> <em>nio</em>.pdf<em>java</em> <em>nio</em>.pdf
python多线程非阻塞socket
socket服务端:采用多进程通信的方法(两个进程,主进程接收socket数据,子进程负责读取缓冲的数据,增大并发性能,接收采用多线程的形式) socket客户端:测试发送数据。
java NIO文档
Java NIO大学课堂文档 Java NIO大学课堂文档Java NIO大学课堂文档Java NIO大学课堂文档Java NIO大学课堂文档Java NIO大学课堂文档Java NIO大学课堂文档Java NIO大学课堂文档Java NIO大学课堂文档Java NIO大学课堂文档
Java NIO实现多个客户端之间的消息互发,客户端与服务器完整代码
服务器在JAVA上,客户端为C++,实现多人聊天消息转发,服务器也可以给客户端发送消息。附上项目完整源代码,client包负责消息发送,sensor包负责消息接收
java NIO 视频教程
Java NIO(New IO)是一个可以替代标准Java IO API的IO API(从Java 1.4开始),Java NIO提供了与标准IO不同的IO工作方式。 Java NIO: Channels and Buffers(通道和缓冲区) 标准的IO基于字节流和字符流进行操作的,而NIO是基于通道(Channel)和缓冲区(Buffer)进行操作,数据总是从通道读取到缓冲区中,或者从缓冲区写入到通道中。 Java NIO: Non-blocking IO(非<em>阻塞</em>IO) Java NIO可以让你非<em>阻塞</em>的使用IO,例如:当线程从通道读取数据到缓冲区时,线程还是可以进行其他事情。当数据被写入到缓冲区时,线程可以继续处理它。从缓冲区写入通道也类似。 Java NIO: Selectors(选择器) Java NIO引入了选择器的概念,选择器用于监听多个通道的事件(比如:连接打开,数据到达)。因此,单个的线程可以监听多个数据通道。
netty简介ppt
netty简介ppt,<em>java</em> NIO介绍便于了解和介绍,<em>为什么</em>要50个字节???
java NIO 写文件
<em>java</em> <em>nio</em> 写文件样例,<em>java</em>写大数据文件时提高性能
Java_NIO框架Netty教程.pdf
介绍JavaNIO框架netty的特点和如何使用等,可以多多学习。
JAVA NIO 实现网络编程
JAVA NIO 实现网络编程JAVA NIO 实现网络编程JAVA NIO 实现网络编程JAVA NIO 实现网络编程
JavaNIO chm帮助文档
Java NIO系列教程(一) Java NIO 概述 Java NIO系列教程(二) Channel Java NIO系列教程(三) Buffer Java NIO系列教程(四) Scatter/Gather Java NIO系列教程(五) 通道之间的数据传输 Java NIO系列教程(六) Selector Java NIO系列教程(七) FileChannel Java NIO系列教程(八) SocketChannel Java NIO系列教程(九) ServerSocketChannel Java NIO系列教程(十) Java NIO DatagramChannel Java NIO系列教程(十一) Pipe Java NIO系列教程(十二) Java NIO与IO
基于NIO非阻塞java聊天demo(支持单聊和群聊)
一个简单的<em>java</em>NIO非<em>阻塞</em>的聊天小demo,支持单聊和群聊
大数据学习之旅——NIO源码
对应文章https://blog.csdn.net/qq_39188039/article/details/86216204
Java I-O NIO and NIO2
完整的讲述了Java的IO,NIO以及NIO2,文档是英文版的,我会陆续翻译其中的NIO章节。
JavaNIO视频&netty;视频&MINA;视频合集
JavaNIO、netty、MINA合集
NIO通信框架
NIO通信框架 网络 通信 类 收集的资料 <em>java</em> 可以使用
JAVA nio的一个简单的例子
一个非常简单的<em>java</em> <em>nio</em>通信的例子,服务器接收到来自客户端的字符串后,计算该字符串的哈希值,然后返回给客户端
常见NIO开源框架(MINA、xSocket)学习
常见NIO开源框架(MINA、xSocket)学习 基于io包的<em>阻塞</em>式socket通信代码简单,在连接数很少的情况下是一个不错的选择。不过实际应用中一个socket服务器采用传统的<em>阻塞</em>式socket方式通信可能会是一场灾难,一路socket同时进行读写操作可能就需要两条线程,如果需要并发一百路socket(这个量其实很小了),可能就是两百条线程,大概几分钟后cpu占用率就是高居不下了。
NIO处理大文件
NIO 处理大文件
JAVA NIO ppt
JAVA NIO 课堂ppt,讲述NIO原理,技术等。
java nio 包读取超大数据文件
Java <em>nio</em> 超大数据文件 超大数据文件Java <em>nio</em> 超大数据文件 超大数据文件Java <em>nio</em> 超大数据文件 超大数据文件Java <em>nio</em> 超大数据文件 超大数据文件Java <em>nio</em> 超大数据文件 超大数据文件Java <em>nio</em> 超大数据文件 超大数据文件Java <em>nio</em> 超大数据文件 超大数据文件Java <em>nio</em> 超大数据文件 超大数据文件Java <em>nio</em> 超大数据文件 超大数据文件Java <em>nio</em> 超大数据文件 超大数据文件
Java.nio
NULL 博文链接:https://shihuan830619.iteye.com/blog/1159544
memcached客户端(三种客户端)
Memcached的<em>java</em>客户端已经存在三种了:官方提供的基于传统<em>阻塞</em>io由Greg Whalin维护的客户端;Dustin Sallings实现的基于<em>java</em> <em>nio</em>的Spymemcached;XMemcached
BIO,NIO,AIO实现的demo
其实NIO这类代码都有一些比较统一的写法,因此将BIO,NIO,AIO的实现代码貼出来进行分享,有需要可以下载,直接执行对应的SERVER和CLIENT端的main函数即可
尚硅谷——Java NIO缓冲
一般默认情况下,缓冲区(buffer)是从即将写入通道(channel)或刚刚从通道中读出的一段数据。它是一个持有数据,并扮演NIO通道端点的对象。缓冲区为数据访问和读写过程提供正式机制。它是NIO和老版Java I/O的一个主要区别。之前数据是直接从流(stream)中读写的,现在数据可以从缓冲区读写。在NIO中,通道是流的同义词
java nio 读文件
<em>java</em> <em>nio</em> 读文件,<em>java</em> <em>nio</em> 读文件
Java NIO系列教程(一) Java NIO 概述
Java NIO系列教程(一) Java NIO 概述
Java NIO——Selector机制解析三(源码分析)
NULL 博文链接:https://goon.iteye.com/blog/1775421
基于nio实现的多文件上传源码
适合于文件小但数量比较大的文件传输 传输速度比传统的流IO要快很多,刚接触<em>nio</em>不久,希望有朋友能对它再进行优化,相信很多项目里用的上
java nio 实现socket
<em>java</em> <em>nio</em> 实现socket<em>java</em> <em>nio</em> 实现socket<em>java</em> <em>nio</em> 实现socket<em>java</em> <em>nio</em> 实现socket<em>java</em> <em>nio</em> 实现socket
Thrift demo
thrift简介,thrift的server以及client端的Java代码,有<em>阻塞</em>式还有非<em>阻塞</em>式NIO
自己写的Java NIO 同步不阻塞IO操作
用<em>nio</em>想的一个不<em>阻塞</em>NIOSocket例子.。。希望对阁下有用
NIO编程技术指南_预览版
NIO编程技术指南_预览版
NIO trick and trap NIO网络
NIO trick and trap NIO,编写高性能Java NIO网络框架
基于Spring Boot + NIO实现的电商平台见证宝服务
基于Spring Boot + NIO实现的电商平台见证宝服务
java NIO原理和使用
<em>java</em> <em>nio</em> 附带例子 以及原理 <em>java</em> <em>nio</em> 附带例子 以及原理 <em>java</em> <em>nio</em> 附带例子 以及原理 <em>java</em> <em>nio</em> 附带例子 以及原理
Nio的方式实现Websocket通讯(解决websocket手机端经常连接不上)
这个Demo是通过NioSession实现的,Tomcat自带的websockt使用手机端连接会经常链接不上,这个Demo非常有效解决了手机端连接不上websocket的bug。demo是SE项目,执行main启动服务器后,web端通过ws的方式连接即可,端口在代码里面有,自己下代码琢磨下就行,通俗易懂!
Java实现简单的阻塞队列2种方式
Java实现简单的<em>阻塞</em>队列2种方式,1使用wait(),notify();2使用countdownlatch实现
Java nio详细介绍 详细介绍java nio
<em>java</em> <em>nio</em>入门知识 <em>java</em> <em>nio</em>详细介绍总结
java nio 网络编程指南
基于<em>java</em> <em>nio</em>的服务器与客户端的开发指南
java nio 写文件
<em>java</em> <em>nio</em> 写文件,<em>java</em> <em>nio</em> 写文件
Java NIO系列教程
Java NIO系列教程 Java NIO Channel Buffer Selector SocketChannel
Java NIO的介绍及工作原理
Java NIO的介绍及工作原理Java NIO的介绍及工作原理
JAVA NIO 学习资料
JAVA NIO学习资料JAVA NIO学习资料
java nio 入门
<em>java</em> <em>nio</em>资源,适合新手入门。<em>java</em> <em>nio</em>资源,适合新手入门。
NIO实现客户端之间通信
NIO实现客户端与客户端之间的通信,通过中心服务进行消息转发。
java nio 尚硅谷 12讲 new
<em>java</em> <em>nio</em> 尚硅谷 12讲 <em>java</em> <em>nio</em> 尚硅谷 12讲 <em>java</em> <em>nio</em> 尚硅谷 12讲
尚硅谷全部视频资源下载(新增Jdk8,JUC,NIO)
收集了尚硅谷最近几年分享出来的视频,更新了redis shiro等最新视频 新增了Jdk8,JUC,NIO。 有Spring4 jquery等等
JAVA异步通信教程
JAVA 7 提供异步通信的很多类,可以编写高性能服务器程序,防止<em>阻塞</em>,节约CPU资源,以上就是NIO2教程,比NIO更上一个档次!
java网络编程(非阻塞阻塞编程)
<em>java</em>,<em>java</em>网络,<em>java</em><em>阻塞</em>编程,非<em>阻塞</em>与<em>阻塞</em>编程
java nio and reactor
<em>java</em> <em>nio</em> 作者的ppt。 How to Build a Scalable Multiplexed Server With NIO 文中讲述如何使用<em>java</em> <em>nio</em>来实现高性能的服务器。 1、建立高性能服务器遇到问题? 2、<em>java</em> <em>nio</em> 和 reactor 的映射关系 3、如果使用<em>java</em> <em>nio</em> 来实现高性能服务器
Java高并发编程代码(Netty NIO 实例)
Java高并发编程代码(Netty NIO 实例)
NettyInAction中文版
NettyInAction中文版,共13章,从入门到精通。Netty介绍 <em>为什么</em>要使用non-blocking IO(NIO) <em>阻塞</em>IO(blocking IO)和非<em>阻塞</em>IO(non-blocking IO)对比 Java NIO的问题和在Netty中的解决方案 Netty是基于Java NIO的网络应用框架,如果你是Java网络方面的新手,那么本章将是你学习Java网络应用的开始;对于有 经验的开发者来说,学习本章内容也是很好的复习。如果你熟悉NIO和NIO2,你可以随时跳过本章直接从第二章开始学习。在你 的机器上运行第二章编写的Netty服务器和客户端。
Java IO图书
共四本图书,JAVA IO系列经典著作。 JAVA I/O,NIO and NIO.2.pdf Java NIO (英文版).pdf Java NIO (中文版).pdf Pro Java 7 NIO.2.pdf
java org.apache.http.nio jar包
找了好久,终于找到了,<em>java</em>刷新同步获取网络资源
Java NIO 英文文字版
Many serious Java programmers, especially enterprise Java programmers, consider the new I/O API--called NIO for New Input/Output--the most important feature in the 1.4 version of the Java 2 Standard Edition. The NIO package includes many things that have been missing from previous editions of Java that are critical to writing high-performance, large-scale applications: improvements in the areas of buffer management, scalable network and file I/O, character-set support, and regular expression matching. Most of all, it boosts performance and speed dramatically.Java NIO explores the new I/O capabilities of version 1.4 in detail and shows you how to put these features to work to greatly improve the efficiency of the Java code you write. This compact volume examines the typical challenges that Java programmers face with I/O and shows you how to take advantage of the capabilities of the new I/O features. You?ll learn how to put these tools to work using examples of common, real-world I/O problems and see how the new features have a direct impact on responsiveness, scalability, and reliability. The book includes: A rundown of the new features in NIO Basic and advanced I/O Concepts Binary I/O and the new buffer classes Memory mapped files and file locking Character I/O: encoding, decoding and transforming character data Regular Expressions and the new <em>java</em>.util.regex package Muliplexing with <em>java</em>.<em>nio</em> Because the NIO APIs supplement the I/O features of version 1.3, rather than replace them, you'll also learn when to use new APIs and when the older 1.3 I/O APIs are better suited to your particular application.Java NIO is for any Java programmer who is interested in learning how to boost I/O performance, but if you're developing applications where performance is critical, such as game computing or large-scale enterprise applications, you'll want to give this book a permanent spot on your bookshelf. With the NIO APIs, Java no longer takes a backseat to any language when it comes to performance. Java NIO will help you realize the benefits of these exciting new features.
Java NIO中文版
Java NIO,Java开发人员不可不看的资料,书架上不可或缺的工具书
Java NIO 主要类和方法(Java NIO中文版 附录C)
Java NIO 主要类,包含类和函数,没有函数说明,类有简要说明
java网络编程精解
Java网络编程精解.pdf Java NIO 系列教程.pdf Java NIO (中文版).pdf
Java NIO 聊天室
package com.ui.server; import <em>java</em>.awt.*; import <em>java</em>.awt.event.*; import <em>java</em>x.swing.*; public class ServerBootFrame extends JFrame { /** * */ private static final long serialVersionUID = 1L; JPanel jp = new JPanel(new BorderLayout()); JPanel jp1 = new JPanel(new FlowLayout()); JScrollPane jsp1 = new JScrollPane(); JButton jbStart = new JButton("启动"); JButton jbEnd = new JButton("关闭"); JTextArea jtaState = new JTextArea(10, 25); Font font = new Font("Serif", Font.BOLD, 18); Color fore = Color.YELLOW; Color back = new Color(81, 217, 251); public ServerBootFrame(String title) { super(title); this.getContentPane().add(jp); jp.add(jsp1, "Center"); jsp1.getViewport().add(jtaState); jp.add(jp1, "South"); jp1.add(jbStart); jp1.add(jbEnd); jtaState.setFont(font); jtaState.setForeground(fore); jtaState.setBackground(back); jp1.setBackground(back); this.setResizable(false); this.setLocation(250, 250); } public void showFrame() { this.pack(); this.setVisible(true); } public void bootingServer(final BootEndInterface bt) { this.jbStart.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { bt.boot(); } }); } public void endingServer(final BootEndInterface ed) { this.jbEnd.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { ed.end(); } }); } public void closeWindow(final BootEndInterface ed) { this.addWindowListener(new WindowAdapter() { public void windowClosing(WindowEvent e1) { ed.end(); } }); } public void appendStringTojtaState(String str) { jtaState.append(str); } } package com.ui.client; import <em>java</em>.awt.*; import <em>java</em>.awt.event.*; import <em>java</em>x.swing.*; import <em>java</em>x.swing.event.*; import <em>java</em>.sql.*; public class LoginFrame extends JFrame { JLabel jUserName=new JLabel("用户姓名:"); JLabel jUserPsd=new JLabel("用户密码:"); JTextField txtUserName=new JTextField("",10); JPasswordField txtUserPsd=new JPasswordField(10); JButton okButton=new JButton("确定"); JButton regButton=new JButton("注册"); JPanel jp=new JPanel(new GridLayout(2,1)); JPanel jp1=new JPanel(new FlowLayout(FlowLayout.CENTER)); JPanel jp2=new JPanel(new FlowLayout(FlowLayout.LEFT)); JPanel jp3=new JPanel(new FlowLayout()); Font f=new Font("Serif",Font.BOLD,15); public LoginFrame() { super("用户登陆界面"); this.setLocation(250,250); this.getContentPane().add(jp,"Center"); this.getContentPane().add(jp3,"South"); jp.add(jp1);jp.add(jp2); jp1.add(jUserName);jp1.add(txtUserName); jp2.add(jUserPsd);jp2.add(txtUserPsd); jp3.add(okButton);jp3.add(regButton); txtUserName.setFont(f); txtUserPsd.setFont(f); txtUserPsd.setEchoChar('x'); txtUserName.setToolTipText("请输入用户名"); txtUserPsd.setToolTipText("请输入用户密码"); okButton.addActionListener(new SolveButtonEvent(1)); regButton.addActionListener(new SolveButtonEvent(2)); this.setResizable(false); this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); } public void showWindow() { this.pack(); this.setVisible(true); } public void closeWindow() { this.dispose(); } public String getUserName() { return this.txtUserName.getText().trim(); } public String getUserPassword() { return new String(this.txtUserPsd.getPassword()); } class SolveButtonEvent implements ActionListener { int select=0; public SolveButtonEvent(int select) { this.select=select; } public void actionPerformed(ActionEvent e) { //int x=(int) LoginFrame.this.txtUserName.getLocationOnScreen().getX(); //int y=(int) LoginFrame.this.txtUserName.getLocationOnScreen().getY(); String userName=LoginFrame.this.getUserName(); String userPsd=LoginFrame.this.getUserPassword(); int nameLength=userName.length(); int psdLength=userPsd.length(); if(select==1) { if(nameLength>0 && psdLength>0 ) { if(LoginFrame.this.query(userName,userPsd)==true) { LoginFrame.this.closeWindow(); //new Client(); } else { MyDialog md=new MyDialog(LoginFrame.this,"提示窗口","错误!","用户名或密码错误.\n登陆失败"); md.showDialog(); } } else { if(nameLength==0) { MyDialog md=new MyDialog(LoginFrame.this,"提示窗口","提示","用户名不能为空"); md.showDialog(); } else if(psdLength==0) { MyDialog md=new MyDialog(LoginFrame.this,"提示窗口","提示","用户密码不能为空"); md.showDialog(); } } } else if(select==2) { RegisterFrame rf=new RegisterFrame(LoginFrame.this); rf.showWindow(); } } } public boolean query(String userName,String userPsd) { Connection conn=null; PreparedStatement psm=null; ResultSet rs=null; String sql="select * from user_manager where name=? and psd=?"; boolean result=false; try { Class.forName("oracle.jdbc.driver.OracleDriver"); conn=DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:xdf","scott","tiger"); psm=conn.prepareStatement(sql); psm.setString(1,userName); psm.setString(2,userPsd); rs=psm.executeQuery(); //rs结果集指向第一条记录的前一个位置 //如果第一条记录为空表示用户名或密码错误 if(rs.next()==true) { result=true; this.closeWindow(); } psm.close(); conn.close(); } catch(ClassNotFoundException e1){ e1.printStackTrace(); } catch(SQLException e2){ e2.printStackTrace(); } catch(Exception e3){ e3.printStackTrace(); } return result; } } package com.<em>nio</em>.client; import <em>java</em>.io.IOException; import <em>java</em>.net.InetSocketAddress; import <em>java</em>.<em>nio</em>.ByteBuffer; import <em>java</em>.<em>nio</em>.channels.SelectionKey; import <em>java</em>.<em>nio</em>.channels.Selector; import <em>java</em>.<em>nio</em>.channels.SocketChannel; import <em>java</em>.util.Iterator; import com.<em>nio</em>.user.ClientUser; import com.<em>nio</em>.user.ClientUserManager; import com.<em>nio</em>.user.UserData; public class NIOClient { private ClientUserManager cltManager = null; //通道管理器 private Selector selector; /** * 获得一个Socket通道,并对该通道做一些初始化的工作 * @param ip 连接的服务器的ip * @param port 连接的服务器的端口号 * @throws IOException */ public void initClient(String ip,int port) throws IOException { cltManager = ClientUserManager.instance(); // 获得一个Socket通道 SocketChannel channel = SocketChannel.open(); // 设置通道为非<em>阻塞</em> channel.configureBlocking(false); // 获得一个通道管理器 this.selector = Selector.open(); // 客户端连接服务器,其实方法执行并没有实现连接,需要在listen()方法中调 //用channel.finishConnect();才能完成连接 channel.connect(new InetSocketAddress(ip,port)); //将通道管理器和该通道绑定,并为该通道注册SelectionKey.OP_CONNECT事件。 channel.register(selector, SelectionKey.OP_CONNECT); } /** * 采用轮询的方式监听selector上是否有需要处理的事件,如果有,则进行处理 * @throws IOException * @throws InterruptedException */ @SuppressWarnings("unchecked") public void listen() throws IOException, InterruptedException { // 轮询访问selector while (true) { // 选择一组可以进行I/O操作的事件,放在selector中,客户端的该方法不会<em>阻塞</em>, //这里和服务端的方法不一样,查看api注释可以知道,当至少一个通道被选中时, //selector的wakeup方法被调用,方法返回,而对于客户端来说,通道一直是被选中的 selector.select(); // 获得selector中选中的项的迭代器 Iterator ite = this.selector.selectedKeys().iterator(); while (ite.hasNext()) { SelectionKey key = (SelectionKey) ite.next(); // 连接事件发生 if (key.isConnectable()) { SocketChannel channel = (SocketChannel) key .channel(); System.out.println("channel client ?" + channel); // 如果正在连接,则完成连接 if(channel.isConnectionPending()){ channel.finishConnect(); } //设置成非<em>阻塞</em> channel.configureBlocking(false); //在这里可以给服务端发送信息哦 //channel.write(ByteBuffer.wrap(new String("向服务端发送了一条信息").getBytes())); //在和服务端连接成功之后,为了可以接收到服务端的信息,需要给通道设置读的权限。 channel.register(this.selector, SelectionKey.OP_READ); //添加用户 UserData userData = new UserData(); userData.lineState = 1; userData.channel = channel; cltManager.addUser(userData); //连接成功发送一个通知消息 UIClient.sendUserInfoMsg(); } else if (key.isReadable()) { ClientUser cltUser = cltManager.getUser((SocketChannel)key.channel()); if (!cltUser.read()) { key.channel().close(); } } //删除已选的key,以防重复处理 ite.remove(); } } } } package com.<em>nio</em>.server; import <em>java</em>.io.IOException; import <em>java</em>.io.UnsupportedEncodingException; import <em>java</em>.net.InetSocketAddress; import <em>java</em>.<em>nio</em>.channels.SelectionKey; import <em>java</em>.<em>nio</em>.channels.Selector; import <em>java</em>.<em>nio</em>.channels.ServerSocketChannel; import <em>java</em>.<em>nio</em>.channels.SocketChannel; import <em>java</em>.util.HashMap; import <em>java</em>.util.Iterator; import <em>java</em>.util.Vector; import com.<em>nio</em>.user.ServerUser; import com.<em>nio</em>.user.ServerUserManager; import com.<em>nio</em>.user.UserData; import com.ui.server.BootEndInterface; import com.ui.server.ServerBootFrame; public class NIOServer implements BootEndInterface { private ServerBootFrame serverFrame = new ServerBootFrame("服务器端"); private ServerUserManager userManager = null; HashMap hmClient = new HashMap(); Vector client = new Vector(); int count = 0; private static NIOServer <em>nio</em>Server = null; public NIOServer() { serverFrame.showFrame(); serverFrame.bootingServer(this); serverFrame.endingServer(this); serverFrame.closeWindow(this); <em>nio</em>Server = this; } // 通道管理器 private Selector selector; /** * 获得一个ServerSocket通道,并对该通道做一些初始化的工作 * * @param port * 绑定的端口号 * @throws IOException */ public void initServer(int port) throws IOException { serverFrame.appendStringTojtaState("服务器(NIO机制)启动中......\n"); // 获得一个ServerSocket通道 ServerSocketChannel serverChannel = ServerSocketChannel.open(); // 设置通道为非<em>阻塞</em> serverChannel.configureBlocking(false); // 将该通道对应的ServerSocket绑定到port端口 serverChannel.socket().bind(new InetSocketAddress(port)); // 获得一个通道管理器 this.selector = Selector.open(); // 将通道管理器和该通道绑定,并为该通道注册SelectionKey.OP_ACCEPT事件,注册该事件后, // 当该事件到达时,selector.select()会返回,如果该事件没到达selector.select()会一直<em>阻塞</em>。 serverChannel.register(selector, SelectionKey.OP_ACCEPT); //System.out.println("serverChannel 0?" + serverChannel); } /** * 采用轮询的方式监听selector上是否有需要处理的事件,如果有,则进行处理 * * @throws IOException */ @SuppressWarnings("unchecked") public void listen() throws IOException { // System.out.println("服务端启动成功!"); serverFrame.appendStringTojtaState("服务器(NIO机制)启动成功......\n"); // 轮询访问selector while (true) { // 当注册的事件到达时,方法返回;否则,该方法会一直<em>阻塞</em> selector.select(); // 获得selector中选中的项的迭代器,选中的项为注册的事件 Iterator ite = this.selector.selectedKeys().iterator(); while (ite.hasNext()) { SelectionKey key = (SelectionKey) ite.next(); // 客户端请求连接事件 if (key.isAcceptable()) { ServerSocketChannel server = (ServerSocketChannel) key .channel(); // 获得和客户端连接的通道 SocketChannel channel = server.accept(); System.out.println("channel A?" + channel); // 设置成非<em>阻塞</em> channel.configureBlocking(false); // 在这里可以给客户端发送信息哦 // channel.write(ByteBuffer.wrap(new // String("向客户端发送了一条信息").getBytes())); // 在和客户端连接成功之后,为了可以接收到客户端的信息,需要给通道设置读的权限。 channel.register(this.selector, SelectionKey.OP_READ); // 添加一个玩家对象 UserData userData = new UserData(); userData.lineState = 1; userData.channel = channel; userManager.addUser(userData); } else if (key.isReadable()) { ServerUser serverUser = userManager .getUser((SocketChannel) key.channel()); // 读取数据失败 if (!serverUser.read()) { serverUser.clean(); key.channel().close(); } } // 删除已选的key,以防重复处理 ite.remove(); } } } /** * 启动服务端测试 * * @throws IOException */ public static void main(String[] args) throws IOException { new NIOServer(); } @Override public void boot() { userManager = ServerUserManager.instance(); userManager.initUsers(); serverFrame.appendStringTojtaState("创建玩家内存数据对象成功...\n"); new Thread(new Runnable() { @Override public void run() { try { NIOServer.this.initServer(5555); NIOServer.this.listen(); } catch (Exception e) { serverFrame.appendStringTojtaState("服务器启动失败......\n"); } } }).start(); //服务端主逻辑处理 new Thread(new Runnable() { @Override public void run() { try { while (true) { Thread.sleep(1); userManager.run(); } } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } } }).start(); } @Override public void end() { if (selector != null) { try { selector.close(); selector = null; } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } System.exit(0); } public void solveMsg(String message) { try { System.out.println(message); // 对消息进行分析 String msg[] = message.split("#"); if (msg[0].equals("AddUser") == true) { hmClient.put(msg[1], msg[2]); sendUsersToOneUser(msg[1]); if (likeThisName(msg[1]))// 如果出现同名用户,则在用户名后面添加数字来区分 { msg[1] = msg[1] + count; } client.add(msg[1]); serverFrame.appendStringTojtaState(msg[1] + "上线...\n"); sendMessageToAllUsers( "AddUser" + "#" + msg[1] + "#" + hmClient.get(msg[1]), msg[1]); } else if (msg[0].equals("UserQuit") == true) { sendMessageToAllUsers("UserQuit" + "#" + msg[1] + "#" + hmClient.get(msg[1]), msg[1]); serverFrame.appendStringTojtaState(msg[1] + "离线...\n"); deleteKeyValue(msg[1]); client.remove(msg[1]); // 应该删除vecUser容器中的对应的Socket对象 } else if (msg[0].equals("Message") == true) { // 如果将消息发送给特定用户 if (msg[1].equals("One") == true) { sendMessageToOneUser("Message" + "#" + msg[2] + "#" + msg[6], msg[4]); } else// 将消息发送给全部用户 { sendMessageToAllUsers("Message" + "#" + msg[2] + "#" + msg[4], msg[2]); } } } catch (Exception e) { e.printStackTrace(); } } public void sendMessageToAllUsers(String msg, String notSendToThisUserName) throws UnsupportedEncodingException { ServerUser lstUsers[] = userManager.getUsers(); for (int i = 0; i < lstUsers.length; i++) { if (lstUsers[i].channel != null) { String address = lockOut("" + lstUsers[i].channel.socket().getRemoteSocketAddress()); if ( !address.equals(hmClient.get(notSendToThisUserName)) ) { lstUsers[i].write(msg.getBytes("utf-8")); } } } } public void sendMessageToOneUser(String msg, String sendToThisUserName) throws UnsupportedEncodingException { ServerUser lstUsers[] = userManager.getUsers(); for (int i = 0; i < lstUsers.length; i++) { if (lstUsers[i].channel != null) { String address = lockOut("" + lstUsers[i].channel.socket().getRemoteSocketAddress()); if ( address.equals(hmClient.get(sendToThisUserName)) ) { lstUsers[i].write(msg.getBytes("utf-8")); break; } } } } // 方法完成将在线用户添给用户的下拉表中 public void sendUsersToOneUser(String newUserName) throws UnsupportedEncodingException { Iterator it = client.listIterator(); for (; it.hasNext();) { String name = it.next(); String ipAndPort = hmClient.get(name); sendMessageToOneUser("OnlyAddUser" + "#" + name + "#" + ipAndPort, newUserName); } } // 将键值对添加到hmClient哈希表中 public void createKeyValue(String userName, String socketAddress) { hmClient.put(userName, socketAddress); } // 从哈希表中删除指定键值对(键为:userName); public void deleteKeyValue(String userName) { hmClient.remove(userName); } // 将字符串前面的斜杠去掉 public String lockOut(String socketAddress) { return socketAddress.substring(1, socketAddress.length()); } // 如果client容器中存放的用户名出现相似用户,则用户名后面添加一个数字 public boolean likeThisName(String thisName) { count = 0; for (Iterator it = client.listIterator(); it.hasNext();) { String temp = (String) it.next(); if (temp.startsWith(thisName) == true) { count++; } } if (count > 0) return true; else return false; } public static void handleMessage(String msg) { // System.out.println("服务端收到信息:" + msg); <em>nio</em>Server.solveMsg(msg); } }
JavaNio视频下载_百度云盘资源
最新的<em>java</em> NIO视频资源免费下载。
Reilly__Java_NIO英文版和中文版
Reilly__Java_NIO英文版和中文版 英文原版和翻译好的中文版 很好的教程
java NIO 学习 聊天室程序 (3)
NULL 博文链接:https://tmdpzc.iteye.com/blog/1737928
基于NIO的远程调用框架的设计与实现 master
基于NIO的远程调用框架的设计与实现 master
Java NIO入门的源码
这是用于JAVA NIO入门教程的源码,直接看也能学到不少哦
[答案V0.2版]精选微软数据结构+算法面试100题[前20题]下载
精选微软等数据结构+算法面试100题答案修正V0.2版本 -------------------- 此份答案是针对,前期已公布的最初的那份答案的,初步校正与修正。 http://download.csdn.net/source/2796735(V0.1版) 相比第一份V0.1版答案,此份答案V0.2版更加准确,亦修正了不少题目的答案。 此份20题的答案,思路更加清晰易懂,简介明了。 请享用。July、2010/11/06。 其它资源,下载地址: 1.[最新答案V0.3版]微软等数据结构+算法面试100题[第21-40题答案] http://download.csdn.net/source 相关下载链接:[url=//download.csdn.net/download/v_JULY_v/2813890?utm_source=bbsseo]//download.csdn.net/download/v_JULY_v/2813890?utm_source=bbsseo[/url]
java飞行棋源代码下载
对初学java的朋友可能有点用处。。。。。。 相关下载链接:[url=//download.csdn.net/download/longwangzaidi/2271583?utm_source=bbsseo]//download.csdn.net/download/longwangzaidi/2271583?utm_source=bbsseo[/url]
Easy网管Server V8.3 破解版下载
主要功能有: 1. 多网段管理 增加了多网段管理,只需要在局域网内1台机器上安装就可以管理多个网段。 2. 自动添加用户 不需要逐个客户机IP地址输入 相关下载链接:[url=//download.csdn.net/download/haha1726/2533064?utm_source=bbsseo]//download.csdn.net/download/haha1726/2533064?utm_source=bbsseo[/url]
文章热词 机器学习教程 Objective-C培训 交互设计视频教程 颜色模型 设计制作学习
相关热词 mysql关联查询两次本表 native底部 react extjs glyph 图标 java nio 学习 java学习-nio
我们是很有底线的