首页 > 代码库 > JAVA IO Buffer
JAVA IO Buffer
所谓的输入,输出,就是把数据移除或移入缓冲区。
硬件不能直接访问用户控件(JVM)。
基于存储的硬件设备操控的是固定大小的数据块儿,用户请求的是任意大小的或非对齐的数据块儿。
虚拟内存:使用虚拟地址取代取代物理地址。
- 可以有多个虚拟地址指向同一个物理地址。
- 虚拟内存空间可以大于实际的硬件内存。
应用:直接内存使用--使用户空间虚拟地址和内核虚拟地址同时指向同一个物理地址,可以使硬件直接访问用户空间内存。
数据库等应用严重依赖文件锁定。
缓冲区:
缓冲区是包在一个对象内的基本数据类型数组。Buffer把关于数据内容和信息包含在一个对象中,并定义了一系列API。
信息提供操作属性:0<=mark<=position<=limit<=capicity
- 容量(Capicity):创建时设定,无法动态更改。
- 上界(Limit):现存元素计数。
- 位置(Position):下一个要被读取的元素位置。动态更新。
- 标记(Mark):备忘位置,mark()设定mark=position,reset()设定postion=mark。
插入“hello”之后:
Buffer类方法签名:
返回Buffer自身的一些方法可以直接级联调用。
创建只读缓存。例如ByteBuffer:
ByteBuffer bf = ByteBuffer.allocate(1024).asReadOnlyBuffer()
Flip():讲一个能够继续添加数据元素的填充状态的缓冲区翻转为一个准备读出元素的释放状态。
bf.flip() = bf.limit(bf.position()).position(0)
rewind():
bf.rewind() = bf.position(0)
缓冲区不是线程安全。
mark():Buffer是从当前位置开始向通道内输出内容的,如下,怎会输出‘ow’,position到6
reset()后,positon至mark位置。
两个具有相同元素的Buffer,只要剩余元素数量(从位置到上界)相同,就equals=true。
Buffer.get(byte[]):BufferUnderflowException;
当将一个buffer内容读入数组,buffer内容不足以填充数组时,会抛出此异常。因为需要指明可以读入的buffer内容长度。如下:
Buffer.get(byte[], 0, Buffer.remaining());
Buffer.put(byte[]):BufferUnderflowException;
当将数组元素写入buffer,buffer没有足够的空间时,会抛出此异常。
JAVA IO Buffer
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。