_074_NIO_介绍(1)

================


package 新型IO;

import java.nio.ByteBuffer;

public class _001_NIO简介
	{

		public static void main(String[] args)
			{
				My_Buffer my_Buffer1=new My_Buffer();
				my_Buffer1.allocateBuffer();

				
			}

	}

class My_Buffer
{
			//	mark //标记(尚不明确)
			//	capacity //容量
			//	limt //限制,第一个不能读写的元素的索引 如果是5,那么0-4都可以,5开始不行
			//	position //位置,读写下一个元素的索引
			//	remain  //剩余  remain= limit -position 
			//	0<=mark<=Position<=limit<=capacity
				
			//	rewind //pos=0 mark丢弃,重绕
			//	clear    //pos=0 lim=cap mark丢弃 只有pos=0,limt到最大,才能清除所有
			//	flip    //lim=pos  pos=0 mark丢弃,只有lim=pos,pos=0,要写入数据到其他地方,从buff读的时候
			//	          //肯定要重头读,所以要pos=0,lim=pos是固定,因为pos后面都先不需要了
			//	reset //pos=mark,需要先使用mark标志下位置
			//	slice  //切片,从当前缓冲区中划出前N个元素构造新缓冲区,n等于当前buffer的remaining大小
			//	          //2个buffer操纵同一byte[] 但有各自的属性,pos limit等

	 public void allocateBuffer()
	 {
         ByteBuffer buffer=ByteBuffer.allocate(10);//ByteBuffer.allocateDirect()是直接分配物理内存
                                                                                   //allocate分配到虚拟机中
         System.out.println("mark:"+buffer.mark()); //pos=0 lim=10 cap=10 显示这3个属性
         System.out.println("position:"+buffer.position());
         System.out.println("limit:"+buffer.limit());
         System.out.println("capacity:"+buffer.capacity());
         System.out.println("remainning:"+buffer.remaining());     
         
         buffer.put((byte)1);
         buffer.put((byte)2);
         buffer.put((byte)3);
         buffer.put((byte)4);
         System.out.println("position:"+buffer.position());
         System.out.println("limit:"+buffer.limit());
         System.out.println("capacity:"+buffer.capacity());
         System.out.println("remainning:"+buffer.remaining());     
         
         buffer.flip();  
         System.out.println(buffer.get()); //不加参数的get会根据当前索引继续读(前面都不是索引操作,现在索引为0),所以如果用无参的get,需要用flip先
         System.out.println(buffer.get()); //如果指定了索引那就不用了
         System.out.println(buffer.get());
         System.out.println(buffer.get());
//         System.out.println(buffer.get()); //因为limit会等于pos,所以固定了读取的长度,指针继续下移读取会出错
        
         
         
         
	 }
}





猜你喜欢

转载自blog.csdn.net/yzj17025693/article/details/85650107
今日推荐