关键概念
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]
当写入了一些数据后buf.put()
或者channel.read(buf)
当我们要从中读取数据,首先要调用buf.flip()
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) 将字节从此通道的文件传输到给定的可写入字节通道。