Java NIO学习笔记之基本概念】的更多相关文章

一.缓冲区操作 缓冲区,以及缓冲区如何工作,是所有 I/O 的基础.所谓"输入/输出"讲的无非就是把数据移进或移出缓冲区. 进程使用 read( )系统调用,要求其缓冲区被填满.内核随即向磁盘控制硬件发出命令,要求其从磁盘读取数据.磁盘控制器把数据直接写入内核内存缓冲区,这一步通过 DMA 完成,无需主 CPU 协助.一旦磁盘控制器把缓冲区装满,内核即把数据从内核空间的临时缓冲区拷贝到进程执行 read( )调用时指定的缓冲区. 图 1-1. I/O 缓冲区操作简图…
Java NIO学习笔记 一 基本概念 IO 是主存和外部设备 ( 硬盘.终端和网络等 ) 拷贝数据的过程. IO 是操作系统的底层功能实现,底层通过 I/O 指令进行完成. 所有语言运行时系统提供执行 I/O 较高级别的工具.在java编程中,标准低版本IO使用流的方式完成I/O操作,所有的I/O都被视为单个的字节流动,称为一个Stream的对象一次移动一个字节. NIO是在JDK1.4之后出现的一种新的IO,sun官方标榜的nio有如下特性: - 为所有的原始类型提供(Buffer)缓存支持…
转 https://blog.csdn.net/u013096088/article/details/79122671 Java NIO学习笔记四(零拷贝详解) 2018年01月21日 20:20:57 阅读数:956 什么是零拷贝 维基上是这么描述零拷贝的:零拷贝描述的是CPU不执行拷贝数据从一个存储区域到另一个存储区域的任务,这通常用于通过网络传输一个文件时以减少CPU周期和内存带宽. 零拷贝给我们带来的好处 减少甚至完全避免不必要的CPU拷贝,从而让CPU解脱出来去执行其他的任务 减少内存…
目录: Java NIO 学习笔记(一)----概述,Channel/Buffer Java NIO 学习笔记(二)----聚集和分散,通道到通道 Java NIO 学习笔记(三)----Selector Java NIO 学习笔记(四)----文件通道和网络通道 Java NIO 学习笔记(五)----路径.文件和管道 Path/Files/Pipe Java NIO 学习笔记(六)----异步文件通道 AsynchronousFileChannel Java NIO 学习笔记(七)----N…
目录: Java NIO 学习笔记(一)----概述,Channel/Buffer Java NIO 学习笔记(二)----聚集和分散,通道到通道 Java NIO 学习笔记(三)----Selector Java NIO 学习笔记(四)----文件通道和网络通道 Java NIO 学习笔记(五)----路径.文件和管道 Path/Files/Pipe Java NIO 学习笔记(六)----异步文件通道 AsynchronousFileChannel Java NIO 学习笔记(七)----N…
目录: Java NIO 学习笔记(一)----概述,Channel/Buffer Java NIO 学习笔记(二)----聚集和分散,通道到通道 Java NIO 学习笔记(三)----Selector Java NIO 学习笔记(四)----文件通道和网络通道 Java NIO 学习笔记(五)----路径.文件和管道 Path/Files/Pipe Java NIO 学习笔记(六)----异步文件通道 AsynchronousFileChannel Java NIO 学习笔记(七)----N…
目录: Java NIO 学习笔记(一)----概述,Channel/Buffer Java NIO 学习笔记(二)----聚集和分散,通道到通道 Java NIO 学习笔记(三)----Selector Java NIO 学习笔记(四)----文件通道和网络通道 Java NIO 学习笔记(五)----路径.文件和管道 Path/Files/Pipe Java NIO 学习笔记(六)----异步文件通道 AsynchronousFileChannel Java NIO 学习笔记(七)----N…
目录: Java NIO 学习笔记(一)----概述,Channel/Buffer Java NIO 学习笔记(二)----聚集和分散,通道到通道 Java NIO 学习笔记(三)----Selector Java NIO 学习笔记(四)----文件通道和网络通道 Java NIO 学习笔记(五)----路径.文件和管道 Path/Files/Pipe Java NIO 学习笔记(六)----异步文件通道 AsynchronousFileChannel Java NIO 学习笔记(七)----N…
目录: Java NIO 学习笔记(一)----概述,Channel/Buffer Java NIO 学习笔记(二)----聚集和分散,通道到通道 Java NIO 学习笔记(三)----Selector Java NIO 学习笔记(四)----文件通道和网络通道 Java NIO 学习笔记(五)----路径.文件和管道 Path/Files/Pipe Java NIO 学习笔记(六)----异步文件通道 AsynchronousFileChannel Java NIO 学习笔记(七)----N…
目录: Java NIO 学习笔记(一)----概述,Channel/Buffer Java NIO 学习笔记(二)----聚集和分散,通道到通道 Java NIO 学习笔记(三)----Selector Java NIO 学习笔记(四)----文件通道和网络通道 Java NIO 学习笔记(五)----路径.文件和管道 Path/Files/Pipe Java NIO 学习笔记(六)----异步文件通道 AsynchronousFileChannel Java NIO 学习笔记(七)----N…
Java NIO概述 Java NIO(新的IO)是Java的替代IO API(来自Java 1.4),这意味着替代标准的 java IO和java Networking API.Java NIO提供了与标准IO API不同的IO工作方式. Java NIO由以下核心组件组成: 通道 缓冲区 选择器 除了Channel,Buffer 并Selector,Java NIO还有其他更多的类和组件.但是Channel,Buffer 和Selector构成了Java NIO API的核心.我认为,其他的…
文章目录: 1.什么是IO 2.什么是Java NIO 3.I/O常见概念 4.为什么使用NIO 5.IO VS NIO 一.什么是IO I/O 或者输入/输出 , 指的是计算机与外部世界或者一个程序与计算机的其余部分的之间的接口.它对于任何计算机系统都非常关键,因而所有 I/O 的主体实际上是内置在操作系统中的.单独的程序一般是让系统为它们完成大部分的工作.在 Java 编程中,直到最近一直使用 流 的方式完成 I/O.所有 I/O 都被视为单个的字节的移动,通过一个称为 Stream 的对象…
最近项目中遇到不少NIO相关知识,之前对这块接触得较少,算是我的一个盲区,打算花点时间学习,简单做一点个人学习总结. 简介 NIO(New IO)是JDK1.4以后推出的全新IO API,相比传统IO方式NIO采用了全新的底层I/O模型.传统IO的设计概念是面向流,而NIO则是面向块.简单点说,传统I/O是基于字节的,所有I/O都被视为单个字节的移动,使用时需先把对象转换为字节码:而NIO是面向块的,以块为单位处理数据,每个操作会生成或消费一个块的数据.从设计理念来看,NIO的操作粒度要比传统I…
Java NIO:Non-blocking Server 即使你了解了Java NIO非阻塞功能的工作(怎么样Selector,Channel, Buffer等等),设计一个无阻塞服务器仍然很难.非阻塞IO包含了相比阻塞IO的要有难度.本章非阻塞服务器教程将讨论非阻塞服务器的主要挑战,并为他们描述一些潜在的解决方案. 本教程中描述的想法是围绕Java NIO设计的.但是,我认为,只要有这样的构造,这些想法可以用其他语言重复使用Selector.据我所知,这样的结构是由底层操作系统提供的,所以很有…
Java NIO 的核心组成部分: 1.Channels 2.Buffers 3.Selectors 我们首先来学习Channels(java.nio.channels): 通道 1)通道基础 通道(Channel)是java.nio的第二个主要创新.它们既不是一个扩展也不是一项增强,而是全新.极好的Java I/O示例,提供与I/O服务的直接连接.Channel用于在字节缓冲区和位于通道另一侧的实体(通常是一个文件或套接字)之间有效地传输数据. channel的jdk源码: package j…
Java NIO散点/收集 Java NIO带有内置的分散/收集支持.散点/收集是读取和写入渠道过程中使用的概念. 从通道散射读取是将数据读入多个缓冲区的读取操作.因此,数据可以从通道“散布”到多个缓冲器中. 对通道进行收集写入是将数据从多个缓冲区写入单个通道的写入操作.因此,数据可以从多个缓冲器收集到一个通道中. 在需要分开处理传送数据的各个部分的情况下,散射/收集可能非常有用.例如,如果一个消息由header和body组成,那么就可以将头和body保存在单独的缓冲区中.这样会使您更容易单独使…
Java NIO与IO Java nio 和io 到底有什么区别,以及什么时候使用nio和io,本文做一个比较. Java NIO和IO之间的主要区别 下表总结了Java NIO和IO之间的主要区别,在下面我们详细看两者的区别. IO NIO 面向流 面向缓冲区 阻止IO 非阻塞IO   选择器 面向流VS面向缓冲区 Java NIO和IO之间的第一差异在于IO是面向流的,其中NIO是面向缓冲的. 面向流的Java IO意味着您一次从流中读取一个或多个字节.你读取的字节取决于你所做的.他们没有任…
为了防止无良网站的爬虫抓取文章,特此标识,转载请注明文章出处.LaplaceDemon/SJQ. http://www.cnblogs.com/shijiaqi1066/p/3344148.html 0 概述 0.1 Socket的问题 传统socket由于需要等待资源,所以会出现阻塞现象.服务器端一般只能使用一个客户端socket对应一个处理线程. 但是有以下局限: Java虚拟机会为每个线程分配独立的堆栈空间,工作线程数目越多,系统开销越大,而且增加了Java虚拟机调度线程的负担,增加了线程…
Java NIO选择器 A Selector是一个Java NIO组件,可以检查一个或多个NIO通道,并确定哪些通道已准备就绪,例如读取或写入.这样一个线程可以管理多个通道,从而管理多个网络连接. 为什么选择器? 使用单个线程来处理多个通道的优点是您需要较少的线程来处理通道.你可以使用一个线程来处理你所有的频道.线程之间的切换消耗系统资源较大,每个线程也占用操作系统中的一些资源(内存).所以你使用的线程越少越好. 现代操作系统和CPU在多任务处理中变得越来越好,所以随着时间的推移,多线程的开销越…
Java NIO SocketChannel Java NIO SocketChannel是连接到TCP网络socket(套接字)的通道.Java NIO相当于Java Networking的socket(套接字).有两种创建SocketChannel的方法: 打开SocketChannel并连接到互联网上的某个服务器. 当一个连接接入到一个ServerSocketChannel时,SocketChannel就会被创建. 打开一个SocketChannel 打开一个SocketChannel:…
Java NIO Pipe Java NIO管道是两个线程之间的单向数据连接.Pipe 具有源信道和接受通道.您将数据写入sink通道.然后可以从源通道读取该数据. 这是一个原理的Pipe流程图: Java NIO:Pipe Internals 创建管道 你打开一个Pipe通过调用该Pipe.open()方法. 代码: Pipe pipe = Pipe.open(); 向管写入信息 要写入Pipe你需要访问接收器通道. 代码: Pipe.SinkChannel sinkChannel = pip…
Java NIO DatagramChannel Java NIO DatagramChannel是可以发送和接收UDP数据包的通道.由于UDP是一种无连接网络协议,因此您不能默认读取和写入DatagramChannel其他通道.而是发送和接收数据包. 打开DatagramChannel 打开一个DatagramChannel代码: DatagramChannel channel = DatagramChannel.open(); channel.socket().bind(new InetSo…
Java NIO FileChannel Java NIO FileChannel是连接文件的通道.使用FileChannel,您可以从文件中读取数据和将数据写入文件.Java NIO FileChannel类是NIO用于替代使用标准Java IO API读取文件的方法. FileChannel无法设置为非阻塞模式.它总是以阻止模式运行. 开启FileChannel 使用之前,FileChannel必须被打开,但是你无法直接打开FileChannel.需要通过InputStream,Output…
Java NIO选择器 A Selector是一个Java NIO组件,可以检查一个或多个NIO通道,并确定哪些通道已准备就绪,例如读取或写入.这样一个线程可以管理多个通道,从而管理多个网络连接. 为什么选择器? 使用单个线程来处理多个通道的优点是您需要较少的线程来处理通道.你可以使用一个线程来处理你所有的频道.线程之间的切换消耗系统资源较大,每个线程也占用操作系统中的一些资源(内存).所以你使用的线程越少越好. 现代操作系统和CPU在多任务处理中变得越来越好,所以随着时间的推移,多线程的开销越…
Java NIO 频道 Java NIO渠道类似于流,他们之间具有一些区别的: 您可以读取和写入频道.流通常是单向(读或写). 通道可以异步读取和写入数据. 通道常常是读取或写入缓冲区. 如上所述,您将数据从通道读入缓冲区,并将数据从缓冲区写入通道.以下是流程图: Java NIO:Channels read data into Buffers, and Buffers write data into Channels Channel 的实现 以下是Java NIO中最重要的Channel实现:…
如今在运行时优化方面,JVM 已然前进了一大步.现在 JVM 运行字节码的速率已经接近本地 编译代码,借助动态运行时优化,其表现甚至还有所超越.这就意味着,多数 Java 应用程序已不 再受 CPU 的束缚(把大量时间用在执行代码上),而更多时候是受 I/O 的束缚(等待数据传输). 五种IO 模式 -- 阻塞(默认IO模式),非阻塞(常用语管道),IO多路复用(IO多路复用的应用场景),信号IO,异步IO 阻塞IO :[阻塞] wait时进程休眠 让出CPU 数据到达后恢复 非阻塞IO :[非…
1.缓冲区分配 方法   以 ByteBuffer 为例 (1)使用静态方法 ByteBuffer buffer = ByteBuffer.allocate( 500 ); allocate() 方法分配一个具有指定大小的底层数组,并将它包装到一个缓冲区对象中 (2)使用wrap方法将数组转成缓冲区 byte bts[] = new byte[1024]; ByteBuffer buffer = ByteBuffer.wrap( bts ); 使用了 wrap() 方法将一个数组包装为缓冲区.一…
小练习:nio读写文件,将fileread中的内容读取到filewrite中 try { //创建输入通道 FileInputStream fis = new FileInputStream("F:/iotest/readfile.txt"); FileChannel readChannel = fis.getChannel(); //创建缓冲区 ByteBuffer buffer = ByteBuffer.allocate(); //创建输出通道 FileOutputStream f…
1.缓冲区分配 方法   以 ByteBuffer 为例 (1)使用静态方法 ByteBuffer buffer = ByteBuffer.allocate( 500 ); allocate() 方法分配一个具有指定大小的底层数组,并将它包装到一个缓冲区对象中 (2)使用wrap方法将数组转成缓冲区 byte bts[] = new byte[1024]; ByteBuffer buffer = ByteBuffer.wrap( bts ); 使用了 wrap() 方法将一个数组包装为缓冲区.一…
缓冲区操作 进程执行I/O操作,归结起来就是向操作系统发出请求,它要么把缓存区例的数据排干(写),要么用数据把数据区填满(读).进程使用这一机制处理所有数据进出操作. 进程使用read()系统调用,要求其缓存区被填满.内核随即向磁盘控制器发出命令,要求其从磁盘读取数据.通过DMA技术直接将磁盘中的数据写入内核内存缓存区,一旦磁盘控制器把缓存区填满,内存立即把数据从内核空间的里你是缓冲区拷贝到进程执行read()调用时指定的缓冲区. 发散/汇聚 根据发散/汇聚的概念,进程只需要一个系统调用,就能把…