java NIO中的buffer和channel

Wesley13
• 阅读 675
缓冲区(Buffer):一,在 Java NIO 中负责数据的存取。缓冲区就是数组。用于存储不同数据类型的数据根据数据类型不同(boolean 除外),提供了相应类型的缓冲区:ByteBufferCharBufferShortBufferIntBufferLongBufferFloatBufferDoubleBuffer上述缓冲区的管理方式几乎一致,通过 allocate() 获取缓冲区二、缓冲区存取数据的两个核心方法:put() : 存入数据到缓冲区中get() : 获取缓冲区中的数据三、缓冲区中的四个核心属性:capacity : 容量,表示缓冲区中最大存储数据的容量。一旦声明不能改变。limit : 界限,表示缓冲区中可以操作数据的大小。(limit 后数据不能进行读写)position : 位置,表示缓冲区中正在操作数据的位置。mark : 标记,表示记录当前 position 的位置。可以通过 reset() 恢复到 mark 的位置0 <= mark <= position <= limit <= capacity四、直接缓冲区与非直接缓冲区:非直接缓冲区:通过 allocate() 方法分配缓冲区,将缓冲区建立在 JVM 的内存中直接缓冲区:通过 allocateDirect() 方法分配直接缓冲区,将缓冲区建立在物理内存中。可以提高效率

通道(Channel):

一、用于源节点与目标节点的连接。在 Java NIO 中负责缓冲区中数据的传输。Channel 本身不存储数据,因此需要配合缓冲区进行传输。

二、通道的主要实现类   java.nio.channels.Channel 接口:      |--FileChannel      |--SocketChannel      |--ServerSocketChannel      |--DatagramChannel三、获取通道1. Java 针对支持通道的类提供了 getChannel() 方法      本地 IO:      FileInputStream/FileOutputStream      RandomAccessFile      网络IO:      Socket      ServerSocket      DatagramSocket      2. 在 JDK 1.7 中的 NIO.2 针对各个通道提供了静态方法 open()3. 在 JDK 1.7 中的 NIO.2 的 Files 工具类的 newByteChannel()四、通道之间的数据传输transferFrom()transferTo()五、分散(Scatter)与聚集(Gather)分散读取(Scattering Reads):将通道中的数据分散到多个缓冲区中聚集写入(Gathering Writes):将多个缓冲区中的数据聚集到通道中六、字符集:Charset编码:字符串 -> 字节数组解码:字节数组  -> 字符串
点赞
收藏
评论区
推荐文章
blmius blmius
3年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
待兔 待兔
4个月前
手写Java HashMap源码
HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22
Wesley13 Wesley13
3年前
Java NIO —— Buffer(缓冲区)
Buffer是一个抽象类,位于java.nio包中,主要用作缓冲区。注意:Buffer是非线程安全类。缓冲区本质上是一块可以写入数据,然后可以从中读取数据的内存。这块内存被包装成NIOBuffer对象,并提供了一组方法,用来方便的访问该块内存。NIO有以下几种Buffer类型:ByteBufferMappedByteBuff
Wesley13 Wesley13
3年前
Java NIO 三大组件之 Channel
JavaNIO之Channel一、什么是ChannelChannel用于源节点(例如磁盘)与目的节点的连接,它可以进行读取,写入,映射和读/写文件等操作。在JavaNIO中负责缓冲区中数据的传输。Channel本省不存储数据,因此需要配合缓冲区进行传输。(个人理解其实就是相当于保存两通信地间的
Stella981 Stella981
3年前
Netty(二)
一、先讲下NIO编程。NIO(NonblockI/O),亦叫做非阻塞I/O与Socket类和ServerSocket类相对应,NIO也提供了SocketChannel和ServerSocketChannel两种不同的套接字通道实现。1 缓冲区Buffer这里首先介绍缓冲区的概念,NIO和原I/O的一个重要区别就是NIO库中,所有数据都是用缓
Wesley13 Wesley13
3年前
JAVA NIO(一)
1NIO概述1.1NIO(newIO)是一个可以替代javaIOAPI的API,NIO提供了与标准IO不同的工作方式,标准IO是基于字节流和字符流进行操作的,而NIO是基于channel和Buffer进行操作,数据总是从通道读取到缓冲区中,或者从缓冲区写到通道中,方式如例图示,JAVANIO的几个核心组成部分是channels,Buf
Wesley13 Wesley13
3年前
NIO通道(channel)原理与获取
一、通道(Channel):用于源节点与目标节点的连接。在javaNIO中负责缓冲区中数据的传输。Channel本身不存储数据,因此需要配合缓冲区进行传输。二、通道的主要实现类java.nio.channels.Channel接口:|–FileChannel|–SocketChannel|–ServerSocketCha
Stella981 Stella981
3年前
Netty之缓冲区ByteBuf解读(一)
!(https://oscimg.oschina.net/oscnet/up6de4d71f462d9846befe00ec6505125a928.JPEG)\Netty在数据传输过程中,会使用缓冲区设计来提高传输效率。虽然,Java在NIO编程中已提供ByteBuffer类进行使用,但是在使用过程中,其编码方式相对来说不太友好,也
Wesley13 Wesley13
3年前
Java NIO编程学习总结
目录1、同步,异步,阻塞,非阻塞的理解2、什么是BIO、NIO、AIO3、javaNIO常用类和方法介绍3.1.缓冲区Buffer3.2.通道Channel3.2.1FileChannel3.2.2SocketChan
Wesley13 Wesley13
3年前
JAVA NIO 直接缓冲区和非直接缓冲区
前面我们一直说NIO能够提高性能,那么到底如何提高效率。本篇就接着上一篇文章的缓冲区,来看看直接缓冲区和非直接缓冲区。非直接缓冲区首先看看非直接缓冲区。我们之前说过NIO通过通道连接磁盘文件与应用程序,通过缓冲区存取数据进行双向的数据传输。物理磁盘的存取是操作系统进行管理的,与物理磁盘的数据操作需要经过内核地址空间;而我们的Java应用