JavaSE---NIO
1、概述
1.1 BIO的问题:
读取输入流中的数据时,如果没有读到有效数据,该线程将被阻塞;
传统输入、输出流都是阻塞式的;
传统的输入、输出流都是通过字节移动处理;
面向流的输入、输出一次只能处理一个字节;
1.2 JDK1.4开始,java提供了NIO;
NIO与BIO有相同的目的:用于进行输入、输出功能;
NIO使用了不同的方式处理输入、输出
(NIO采用内存映射文件的方式来处理输入、输出;
NIO将文件或文件的一段区域映射到内存中,这样就可以像访问内存一样来访问文件,这种方式模拟了OS上的虚拟内存的概念;
);
Channel、Buffer是NIO的2个核心对象:
Channel
对BIO的模拟(类似于InputStream、OutPutStream);
NIO中所有数据都需要通过Channel传输;
Channel与BIO的InputStream、OutPutStream不同在于:提供一个map方法,可以直接将“一块数据”映射到内存中;
BIO是面向流、NIO是面向块;
Buffer
可以理解为一个容器,本质是一个数组(类似于BIO的缓冲区);
发送到Channel的所有对象必须先放到Buffer中;
从Channel中读取的数据也必须先读取到Buffer中;
JavaSE---NIO的更多相关文章
- javaSE学习路线
Java SE大致可分为以下几块内容: n 对象导论:如何用面向对象的思路来开发 n 深入JVM:Java运行机制以及JVM原理 n 面向对象的特征:封装.继承.抽象.多态 n 数组和容器:容 ...
- Tomcat 的三种(bio,nio.apr) 高级 Connector 运行模式及apr配置
转: http://www.oschina.net/question/54100_16195omcat的运行模式有3种.修改他们的运行模式.3种模式的运行是否成功,可以看他的启动控制台,或者启动日志. ...
- 基础1 JavaSe基础
JavaSe基础 1. 九种基本数据类型的大小,以及他们的封装类 boolean 无明确指定 Boolean char 16bits Character byte 8bits Byte short 1 ...
- Five ways to maximize Java NIO and NIO.2--reference
Java NIO -- the New Input/Output API package-- was introduced with J2SE 1.4 in 2002. Java NIO's purp ...
- java nio(一)buffer
概述 常见的网络io分为两种情况,BIO(block-io)和NIO(non-block-io),分别位于java.io和java.nio. BIO,是阻塞的io,采用一个线程处理一个连接的方式,就算 ...
- JavaSE&&JavaEE&&JavaME的区别【Java中常用的包结构】
一.javaEEJavaSEJavaME用的同一个jar包吗? javaEE JavaSE javaME 用的JDK是同一个,开发j2SE工程的话只要有JDK就可以了,开发J2EE工程和J2ME工程除 ...
- 理解IO、NIO、 AIO
转载:https://baijiahao.baidu.com/s?id=1586112410163034993&wfr=spider&for=pc nio 同步: 自己亲自出马持银行卡 ...
- java基础-网络编程(Socket)技术选型入门之NIO技术
java基础-网络编程(Socket)技术选型入门之NIO技术 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.传统的网络编程 1>.编写socket通信的MyServer ...
- epoll, NIO,AIO
Java 网络IO编程总结(BIO.NIO.AIO均含完整实例代码) Java中BIO,NIO和AIO使用样例 https://blog.insanecoder.top/javazhong-bio-n ...
- Java NIO —— Buffer(缓冲区)
Buffer是一个抽象类,位于java.nio包中,主要用作缓冲区.注意:Buffer是非线程安全类. 缓冲区本质上是一块可以写入数据,然后可以从中读取数据的内存.这块内存被包装成NIO Buffer ...
随机推荐
- Visual Studio 2012自动添加注释(如版权信息等)
http://blog.csdn.net/jiejiaozhufu/article/details/16357721注释宏的原码 /********************************** ...
- 网站下载器WebZip、Httrack及AWWWB.COM网站克隆器
动机 闲扯节点,可略读. 下载并试用这些软件并非是为了一己之私,模仿他人网站以图利.鉴于国内网络环境之艰苦,我等屌丝级半罐水程序员,纵有百度如诸葛大神万般协力相助,也似后主般无能不能解决工作和娱乐中 ...
- java 字符流 字节流
java对文本文档进行操作(拷贝.显示)出现乱码一般来说,可以从两个方面入手. 1.文本文件本身的编码格式. 2.java代码中处理文本文件的编码格式. 这里要注意的一点是,我们可以看出copyFil ...
- c#转 java学习笔记(原创)
JDK开发人员用,JRE运行时环境(比如给客户安装,客户电脑需要装JRE) 当我们调用构造方法的时候系统会执行如下操作:1.给对象的属性分配空间,并且初始值 0 or null 2.给属性赋缺省值 ...
- js学习路线
JavaScript 数据类型 JavaScript 变量 Javascript 运算符 JavaScript 流程控制 JavaScript 数组 JavaScript 函数基础 JavaScrip ...
- linux内核中的##__VA_ARGS__有什么作用?
答: 1.__VA_ARGS__是一个可变参数宏: 2. 当可变参数的个数为0时,这里的##起到把前面多余的","去掉的作用,否则会编译出错: 3. 示例 3.1 #defin ...
- DevExpress ASP.NET Dev控件客户端事件 ClientSideEvents
原文地址:http://www.cnblogs.com/allenlf/p/4171189.html
- bzoj3328: PYXFIB(单位根反演+矩阵快速幂)
题面 传送门 题解 我们设\(A=\begin{bmatrix}1 & 1 \\ 1 & 0\end{bmatrix}\),那么\(A^n\)的左上角就是\(F\)的第\(n\)项 所 ...
- ios swift UITextView高度自适应
在ios开发中,用到多行输入时一般都会用到UITextView.常见的比如说聊天输入框,评论输入框等,当用户输入多内容时,我们希望高度能根据用户输入的内容扩大而扩大.其实实现这个功能也不是很难,只需要 ...
- JDK 1.6.0_45 下载
Java SE Development Kit 6u45 Product / File Description File Size Download password Linux x86 65.46 ...