JAVA NIO(一)体系

关键概念

Buffer

概念:装基本数据类型的容器。内部基于线性数组。
子类:ByteBuffer, CharBuffer, DoubleBuffer, FloatBuffer, IntBuffer, LongBuffer, ShortBuffer
基本用法:
新建一个BtyeBuffer: ByteBuffer buf = ByteBuffer.allocate[4096];
写入数据到Buffer: buf.put()
从Buffer读数据: buf.read()
关键点:内部结构

基本属性 概述
缓冲区的容量(capacity) 是它所包含的元素的数量。缓冲区的容量不能为负并且不能更改。
缓冲区的限制(limit) 是第一个不应该读取或写入的元素的索引。缓冲区的限制不能为负,并且不能大于其容量。
缓冲区的位置(position) 是下一个要读取或写入的元素的索引。缓冲区的位置不能为负,并且不能大于其限制。

ByteBuffer操作图解

一个初始化的BufferByteBuffer buf = ByteBuffer.allocate[11]

ByteBufferInit.jpg

当写入了一些数据后buf.put()或者channel.read(buf)

ByteBufferWrite.jpg

当我们要从中读取数据,首先要调用buf.flip()

ByteBufferFilp.jpg

Channel

概念:可以输入输出双向操作的通道。
子类内部有Buffer,提高了性能。
常用子类

FileChannel

常用操作

创建方式

1.通过文件流获取
FileInputStream.getChannel()
2.通过RandomAccessFile获取
RandomAccessFile.getChannel()

读到缓冲区

read(ByteBuffer dst) // 将字节序列从此通道读入给定的缓冲区。

写到缓冲区

write(ByteBuffer src) //将字节序列从给定的缓冲区写入此通道。

复制文件

transferFrom(ReadableByteChannel src, long position, long count) //将字节从给定的可读取字节通道传输到此通道的文件中。
transferTo(long position, long count, WritableByteChannel target) 将字节从此通道的文件传输到给定的可写入字节通道。

你可能感兴趣的:(JAVA NIO(一)体系)