java nio学习笔记1

来源:互联网 发布:手机淘宝怎么投诉盗图 编辑:程序博客网 时间:2024/06/05 21:55


最近在学习java NIO上面的东西,想重写一个公司关于底层通讯的一个client端,所以,开始仔细学习java nio。最近java7里面新增了一个file包,还有一个很重要的类:path将在后面进行介绍。

这篇文章首先介绍Buffer。Buffer有四个非常重要的属性:position,limit,capacity,mark

position:表示当前缓冲区指针指向的位置,是一下个读取或者写入的元素的索引,会被put()和get()刷新

limit:表示当前缓冲区元素的个数,或者说是第一个不能被读或写的元素

capacity:表示缓冲区的容量,只能在初始化的时候被设定,不能被更改,有两种方式

第一种方式:直接初始化申请一定容量的缓冲区,并从堆内从隐含的分配了一个capacity大小的数组。作为备份存储器来储存capacity大小的变量。
第二种方式:直接申明一个capacity大小的数组,然后将这个数组wrap到缓冲区中,同时此数组中任何改动都会影响到缓冲区中的元素。

常用API操作

记录几个概念不容易理解的(都是我个人理解):
duplicate,slice,asReadOnly。这三个api都是操作原缓冲区生成新缓冲区的操作,不过有一点很重要,看下面代码


这时候在dup里面不会有原来的元素,但是dup拥有与buffer一样的position,limit,capacity,但是这三个值以后确实相互独立的,也就是说dup和buffer可以拥有不一样的position,limit,capacity。
补充一点,如果在上面一段代码后面添加buffer(dup).put(anything),buffer和dup会同时更改缓冲区的内容,而buffer会保留以前的缓冲区内容。
slice和asReadOnly也拥有同样的特性
1.duplicate():创建一个新缓冲区,在创建的同时,将原缓冲区的position,limit,capacity赋予新缓冲区,当以后相互独立,在创建前,源缓冲区的内容不会跟随进入新缓冲区。
2.asReadOnly跟duplicate一样,只是创建的新缓冲区只读,如果想修改这个只读缓冲区的内容,可以修改原缓冲区。
3.slice:创建一个新缓冲区,position=0,limit=capacity=原缓冲区的limit-position。

总结一下,缓冲区的操作其实相对比较简单,但是在缓冲区与硬件交互的时候,牵涉到操作系统的知识各种不懂,期待以后继续学习。


原创粉丝点击