Java NIO(2):缓冲区基础
缓冲区(Buffer)对象是面向块的I/O的基础,也是NIO的核心对象之一。在NIO中每一次I/O操作都离不开Buffer,每一次的读和写都是针对Buffer操作的。Buffer在实现上本质是一个数组,其作用是一个存储器,或者分段运输区,并且提供了对数据的结构化访问,而且还可以跟踪系统的读/写进程。对于传统的流I/O,这是一种设计上的进步。
为了方便理解,下面我会主要采用代码示例加注释的方式说明缓冲区比较重要的API和知识点。
缓冲区基础
Buffer缓冲区的家谱如下图:
aaarticlea/png;base64,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" alt="" />
作为所有缓冲区类的父类,Buffer类的包含了下面4个重要属性,
// Invariants: mark <= position <= limit <= capacity
private int mark = -1;
private int position = 0;
private int limit;
private int capacity;
这4个属性指明了Buffer所包含的数据元素的信息。
@Test1
/**
* 缓冲区4属性
* capacity 容量: 能够容纳数据元素的最大数量,在缓冲区创建时指定并且不能更改。
* limit 上界: 缓冲区第一个不能被读或写的元素索引,也就是数据的上限位置,这个位置以后即便有数据,也是不能够访问的。
* position 位置: 缓冲区下一个读或写的元素索引。
* mark 标记: 标记一个索引。调用mark()方法将会设定mark = position,调用reset()方法将设定position = mark。
* 四者之间关系始终为 mark <= position <= limit <= capacity
*/
public void testNewBuffer()
{
CharBuffer cb = CharBuffer.allocate(10);
//buffer初始设置
System.out.println(cb.capacity()); //结果为10
System.out.println(cb.limit()); //结果为10
System.out.println(cb.position()); //结果为0
//mart初始值为-1
}
下面是缓冲区主要API列表:
public abstract class BufferAPI
{
public final int capacity(); //返回capacity值
public final int position(); //返回position值
public final Buffer position(int newPosition); //设置新的position值
public final int limit(); //返回limit值
public final Buffer limit(int newLimit); //设置新的limit值
public final Buffer mark(); //标记位置 mark = position
public final Buffer reset(); //返回标记位置 position = mark
public final Buffer clear(); //重置缓冲区的属性到新建时的状态,不会清楚数据
public final Buffer flip(); //缓冲区翻转,用于读和写的切换
public final Buffer rewind(); //重置缓冲区position和mark属性
public final int remaining(); //返回缓冲区可读或写的元素数量
public final boolean hasRemaining(); //缓冲区是否还有可读或写的元素
public abstract boolean isReadOnly(); //缓冲区是否是只读的
}
需要注意的是有些方法的返回值是Buffer,它返回的是自身的引用,这是一个精巧的类设计,允许我们级联的调用方法。
@Test2 级联
/**
* Buffer支持级联用法
*/
public void testCascade()
{
ByteBuffer bb = ByteBuffer.allocate(10);
//正常调用
bb.mark();
bb.position(5);
bb.reset();
//级联调用
bb.mark().position(5).reset();
//上述2种方法是等价的,但无疑级联调用更加美观简洁
}
在上面的API中并没有看到存取的方法,这是因为存取的方法都定义在具体的子类中,从家谱图看出对于除了boolean类型的其他基本类型,缓冲区都实现了具体的子类。缓冲区本质是用数组来存放数据元素的,那么不同的类型需要建立不同的数组。
缓冲区的存取是通过put()和get()方法实现的,以ByteBuffer类为例,如下:
@Test3 存取
/**
* buffer的存取
*/
public void testPutGet()
{
/**
* buffer的存取都通过put和get方法,并且提供了两种方式:相对和绝对
* 相对方式:put和get的位置取决于当前的position值,调用方法后,position值会自动加1。
* 当put方法position大于缓冲区上限会抛出BufferOverflowException;同样
* 当get方法position大于或等于缓冲区上限抛出BufferUnderflowException。
* 绝对方式:put和get需要传入索引参数,调用方法后position值不会发生改变。当传入的索引值
* 是负数或者大于等于缓冲区上界,抛出IndexOutOfBoundsException。
*/
ByteBuffer bb = ByteBuffer.allocate(8);
//相对put,position递增
bb.put((byte)'h').put((byte)'e').put((byte)'l').put((byte)'l').put((byte)'o').put((byte)'!');
bb.flip(); //翻转缓冲区,读写转换
//相对get position递增
while(bb.hasRemaining())
{
System.out.print((char)bb.get()); //输出“hello!”
}
System.out.println();
//绝对put
bb.put(0, (byte)'a');
bb.put(1, (byte)'b');
bb.rewind(); //重置position,一般用于重新读
//绝对get
for(int i=0; i<bb.remaining(); i++)
{
System.out.print((char)bb.get(i)); ////输出“abllo!”
}
//重置缓冲区为空状态 以便下次使用
bb.clear(); /**
* 遍历缓冲区的两种方法
* 1.
* for(int i=0; bb.hasRemaining(); i++)
* 允许多线程来访问缓冲区,每次都会检查缓冲区上界;
* 2.
* int count = bb.remaining();
* for(int i=0; i<count; i++)
* 如果不存在多线程问题则会更加高效
*/
/**
* 缓冲区也提供了批量存取的put和get方法
*/
}
在@Test3中,缓冲区的属性以及数据元素的变化有必要详细说明下,初始化的缓冲区状态如下图:
aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAAAvsAAACMCAIAAABtW/FJAAAU2ElEQVR4nO3dP4jjRhvH8SlSXBHC8pLAQUJwEUGqY0kZBOcykGZVBK7Lgso0Llxct5VIeY3hyi1cbJUs5oojlco0gi0PV1sEvOUVKq70Wzy5YSLZWt2uPM9Y8/0Ux9nrPyNrNPPTjP6YLQAAwNgZ7QIAAAAcHIkHAACMH4kHAACMH4kHAACMH4kHAACMH4kHAACMn1riKYoiTdMkSbIsK8tSqxha6rpOkqSqKu2C+GPXeJqm8/lcuzj+LJdLu+BFUWgXR8FqtUrTdL1eaxfEh81mk7bkea5dLk/czXy1WmkX5+DW63V7dYvFYqFduoNbr9dZliVJIl15+Nu4TuJJ09QYM5/PZfMwxsSwbbhkqeNJPLK8eZ4XRZHnuTEmTVPtQvkgC5tlmV3wLMu0C+WVhPt4antZlsaY5L8iWemSddyGfblcahfqsKqqSlqMMcaY0SeesixleYuimM/n8v/AQ49C4lksFo3aIInYf0lUyD6BbBKR9AFFUTTavuVyKZFXsVQerNdryXn2mfZPMXp5nkeVeIqiSJJks9loF8Q3CfTugL0EIL0S6ZAMFMOonozu2KouCx54uFdIPO3NQDJQDA2iDcLxLPL244bReFLGvVXK443MZ7lruaoqY0w8c1uLxSJJEgm4Mdf2GLS7+bIsi6Ko61qrSCqkg4thqdttePgZVyHxtGNgPN1AlmUysCGLHEkfsN1u20OdMSSeNun7IxnjWa/XMuIdVW23FbuqqkgWefuxQYvwiMwGGcSN5CCNRraT+evAW3XfiUfG+dvhRmZ/PRdGUVR9QJu0C6Of53ZVVSXzHYG3CAOys9VR1XZZxfZgDsl82oU6ONmiy7K0w9iRLLhrs9mEP60zIDmOJ03TsizLspRqH3jq9Z149g3nRNUTbCPrAxrk0M4IV7f0f5EM8LiHs8RT22VJZS1XVSXdQAwD2JJ4JOMWRWGPXI5qP7Z9JNPoyWZ+RBmXxKMjnj6gYblcyrYR1aGddV3LHIe0ieG3C48kodaO4cVT2+u6LoqiMYcrFV6rSH7YxOM+KTv98WzpsfViWZZJa7bZbDabjdSBwA/ZDijxRLU3EE8f4JLjtdM0jeGwvn1i6P/SNHXH9uOs7dZ8Ph/94ktv12jYozpqLaqF3X7cq2n02lLVQz5BnSOXdUTYB0R1GZ4Oo+//7MxO4wol8p8RL/g+kgbGveDS3zfa8Kga9tjO0dtZq8Nf4wGdnR7V9GdsiUfiTuADnoOTS9E0RvV3PjkmMrPjkpAnF6Yb9/CeHLcb2xrffjwlpbHHLzEokoY9timtnb12Yzo7QAqJp33+Xvgn8Q8uqsQj20ZscWe760KLcpGuqFrGbUy1fd8aj+H8ncb16LYxNew7A9+47TwxrV0HQqN2l4nkvxcjj+QCBlY8fcB2u5VJjThvNiQH98ntNY7lQuyDi6q2uzdUiWqNy+WX5ISdeO4yIWRsI5KFtWTs1p6dJ21d4LFP7U6iMtKbRHPDuQa510Qk7eC+O+3FkHi2/z2BM8/zkHeADiSe2i6iXePufSWjatgXi0VUNdySmwQf0RpXSzwAAADekHgAAMD4kXgAAMD4kXgAAMD4kXgAAMD4kXgAAMD4kXgAAMD4kXgAAMD4kXgAAMD4kXgAAMD4me12+/fff5dRur6+1i6CjmgX/M8//9Qugo5oF/yPP/7QLoKON2/e/PXXX9qlUPDmzZs3b95ol0LH+/fvtRNF6Mzr168NAAA4Zl9//fVsNrO9+83NzXSX8b3m9evXfRPPxcWFMebq6ko7nvr28uVLY8xvv/2mXRDfXr16ZYz5+eeftQvi29XVVcwLfnp6ql0QBdINaJdCwVdfffX5559rl0LB6elpnAv+7bffTqfTm5sb27u/f/9+5ytH9pqXL1+en59/WuK5vb3t+YbRuLy8NMa8evVKuyC+lWVpjInkvuWu29vbmBf8+fPn2gVRYIz57rvvtEuh4Jtvvjk5OdEuhYLpdBrngn///fe//PKLdikUXF5eknjuR+LRLohvJB7tgigg8cSGxBObu7u7d+/e9XwxiYfEEwsSj3ZBFJB4YkPiQQcSD4knFiQe7YIoIPHEhsSDDiQeEk8sSDzaBVFA4okNiQcdSDwknliQeLQLooDEExsST2zevn37+++/93wxiYfEEwsSj3ZBFJB4YhNt4nn27NnLly+1S6GAc7V6IfFoF8Q3Eo92QRSQeGITbeKZTqf//POPdikUkHh6IfFoF8Q3Eo92QRSQeGJD4okNiacXEo92QXwj8WgXRAGJJzYkntiQeHoh8WgXxDcSj3ZBFJB4YhNt4vnxxx/LstQuhQISTy8kHu2C+Ebi0S6IAhJPbKJNPNGeq0Xi6YXEo10Q30g82gVRQOKJDYknNiSeXkg82gXxjcSjXRAFJJ7YkHhiw321eiHxaBfENxKPdkEUkHhiQ+JBBxIPiScWJB7tgigg8cSGxIMOJB4STyxIPNoFUUDiiQ2JBx1IPCSeWJB4tAuigMQTGxJPbLivVi8kHu2C+Ebi0S6IAhJPbKJNPNxXqw8SD4knFiQe7YIoIPHEJtrEwzWX+yDxkHhiQeLRLogCEk9sSDyxIfH0QuLRLohvJB7tgigg8cSGxBMbEk8vJB7tgvhG4tEuiAIST2yiTTzcV6sPEg+JJxYkHu2CKCDxxCbaxBPtuVoknl5IPNoF8Y3Eo10QBSSe2JB4YkPi6YXEo10Q30g82gVRQOKJDYknNtxXqxcSj3ZBfCPxaBdEAYknNiQedCDxkHhiQeLRLogCEk9sSDzoQOIh8cSCxKNdEAUkntiQeNCBxEPiiQWJR7sgCkg8sSHxxIb7avVC4tEuiG8kHu2CKCDxxCbaxMN9tfog8ZB4YkHi0S6IAhJPbKJNPFxzuQ8SD4knFiQe7YIoIPHEhsQTGxJPLyQe7YL4RuLRLogCEk9sSDyxIfH0QuLRLohvJB7tgigg8cQm2sTDfbX6+DfxzGazi8icnZ0ZY3766Sftgvh2fn5ujPnhhx+0C+LbbDaLecEnk4l2QRQYY/73v/9pl0LBF1988eTJE+1SKJhMJnEu+JdffhnnuVqflnhev35tAADAuFxeXtrOXvZ1O15zd3d3enr6+M/x/5qLi4u+iafn6w7k7OwswnklAACCIvMexpjr62vtshyKZuK5ubkxxjx9+vTDhw+KxQAAIGbSHYvT09MBP/nu7u7t27cDfuBjaCYemygZ5gEAQIvtjgcf5pnNZsNGqMdQSzxuomSYBwAAFW53POwwz93d3ZMnT8KZKVNLPI1EyTAPAAD+NbrjAYd55ETRwWfKHkwn8bQTJcM8AAB41u6Oh8oodoAnnAOidRLPzkTJMA8AAD7t7I4HySh2gCecYR6FxLMvUTLMAwCANx8+fHAvY2iMef78uX14dXX14E9uDPAEMsyjkHg6EiXDPAAAqDDG9L+aX7fGAE8gwzwKiad0PH369PT01D68ubnxXx4AADBU4tk5wBPCMI/yNZcnk8l0OtUtAwAAGCrx7BzgCWGYh8QDAACGnNWyptPpZDIZ9jMfjMQDAABIPAdG4gEAIAQknsMi8QAAEAISz2GReAAACAGJ57BIPAAAhIDEc1gkHgAAQkDiOSwSDwAAISDxHBaJBwCAEJB4DovEAwBACEg8hzWZTE5OTqYYyIsXL3RXKADgSJF4Dms2m2mHhPGYTCbGmNvbW911CgA4RiQeHI2LiwsSDwDgYUg8OBokHgDAg5F4cDRIPACAByPx4GiQeAAAD0biwdEg8QAhe/HihQHCRuLBcSDxACGbTqcnJycXQMAG70FIPDiICxIPELCgmn7Aj6CqPYlnPEg8QMiCavoBP4Kq9iSe8SDxACELqukH/Aiq2pN4xoPEA4QsqKYf8COoak/iGQ8SDxCyoJp+wI+gqj2JZzxIPEDIgmr6AT+CqvYknvEg8QAhC6rpB/wIqtqTeMaDxAOELKimH/AjqGpP4hkPEg8QsqCafsCPoKo9iWc8SDxAyIJq+gE/gqr2JJ7xIPEAIQuq6Qf8CKrak3jGg8QDhCyoph/wI6hqT+IZDxIPELKgmn7Aj6CqPYlnPEg8QMiCavoBP4Kq9iSe8SDxACELqukH/Aiq2pN4xoPEA4QsqKYf8COoak/iGQ8SDxCyoJp+wI+gqv2OxHN9fW2O3Gw28/YLlsH49ddfjTFXV1faBfnXu3fvvK0FYKdXr15pt0bh8tlOwo8RdN+Hc3Z2tiPxXFxcXFxceF9TgynLcjqd+vmuq6urp0+fTsPw7Nmzzz77LE1T7YL868mTJ37WArDP+fn55eWldin+dXt7G85ugM92Et4E2H3f3t7e3Nxol2J7e3s7mUxIPI9yeXl5fn7u57uOjjHMmUJZUIknKCSeUTr27vtwSDwDIPF0IPFAHYlnHxLPKB179304OolnvV6nabperwf5tM1mk2VZ48lxJ56qquq67v/8sF/9SSuOxAN1AyaePM/zPJf/Z1m2WCz6v7fR7vXfjpbLZZqmaZrO5/NPKu29SDyjFHjicTecuq4f2WeVZZllWZqmeZ7fu03pJJ6qqowxVVUN8mlpmiZJ0nhy3IknSZKiKOT/RVHYX9J9fnBFUSQftSPmPiQeqBsw8UjykP9/6uZWVVWSJLK1LhaLdqu103w+N8bM5/OiKNxvHwSJZ5QCTzx2w1mv13aLeJjVamWMyfO8KIosy5Ik6Q49x514yrKUuBNb4imKoizLbeuXtM8PrixLY8xyudx+bLjtnm43Eg/UHSjxPIbsP/R5pZurNptNkiSyGQ6CxDNKgSce6/FJIE1Td/f73o6pV+JZLBZlWa5WKxk7ku3NPlytVvZdm81mPp/bAdjNZiPPl2W5WCxWq5U831jO1WpVFIUMbS0Wi54DxdLvzufz+Xx+RImnqqp9K3jfhFH3W7prTMd7N5tNVVV2HXXLssytWMvlsmd7TeKBugMlHruDIe3ber3O8zxNU7v/6j7cbrd1XUtDJ+PwEmXkE/a1exJx3N2YYcdxSTyjdG/isT11lmVu7SrLUiptmqZuhbQZQP7UyNz73uX+Kc9z29dIta/r2o5fSjxovHe1WskXlWW5r85LBrAP790h6ZV40o+KosjzXAaR5GGWZcYY+clk48yyrCgKGYC1naKdEJGf2O2nl8ulHTzYtnrWDnVdyy+4c28ptMSTZZnUMPs7uEFEQpv9k8097kSSu28nrZ5kPmOMnWZyW0MZNrdsMJW15n6jW2P2taeN5/tncxIP1B16Vstup7IDZoyRQDOfz6XBlJfZraadeDraPdmxlLYuz/MkSXrupfRB4hml7sQjc0nSU0v9tKMYdoZIOghbJ20GWC6X8ifba3S8Szr39pST1PxG4pG9aLduJ0kiGahjQFT+JBuRfJ07BNPWN/EkSWIPL2rMIrmbvRuv3E6xKAq3KPZPspCPHKQ9isQjv6HNsBIZ5f9SS2Sd1XVtm9T1eu3+aNLYyf/tb95IHvZ5qYXu19naJuvCDv012tB982Ju4e0zfWbQSDxQ5yHxtDdVu1VKZNm2msSeo6TSJrR3XQZB4hml7sTTiNe2M8qyzJ0Scquo1EDbTbjppONdjf1kGenZdvZfNkiVZdkz3Muwi+z833to/yeM8bjlbjxsjwpUVbVYLPZt3rKcku8ePyd9RInHPnQHqxvVwk7Vy6/k/j527OfexNOY3dw6E5zyc9maJLnq3tGapHV82b7RoAYSD9T5GeOxr2k/fEzikW+U6Wl514Chh8QzSt2Jp7372lZVlbuPvbNDaX+I+y6p7TuP09jXf7nfmOd5n9keGTparVZ2AKU79AyceKTEIk3T7sQjr+l5GKAsmGh0tMeSeBprIvk4M9UOHHYZbXrN89yNPvcmnvavZH/q9s/VTjNt7aE4xnhwLI438cjctHv6rh0xGgSJZ5Q6Ek9d1/sa/PV67faz7mROe1wjcc632vmu1Wq1r4bv679k99vOfN07GtKYBtn22KyGTDwSd1arlYwfdGze8qfVaiUTin2GCtbrdfVR4/T9Y0k8O2tMd+LZbrdlWdoDgNpNrc/E435gz5GhLYkHATjexNM4VKD/G3si8YzSvWM8jTAhddKOJsqTjVmtxjlQdoxn37vkMFN3Wqqua/c4nu2u40Hli3qeGSNf0Ximu2MaMvEk/z0xTA4j6kg87p8eczXCY0k87o/WmNVqHyKzWCzqunbrpaxdeebexNMehLTPPCzxNGo852rhiBxv4pExHrfbYIwH9+pOPI3GXKpi+yCKxqyWW13lOFEZhtj3rvaVFOzxQx2JRyp849igfWTH2/0Kr2M87oyalNuextWReBof6F7StKdjSTxusHArkzRhduDKHkosl8CxM0fyUD6hUWPssF6jCbZf5x7E3p142kNo9hPcl7UT1T4kHqgLMPHIJjmfz2UD72j35BvLspSDJO49G+WTkHhGqTvxSF6RGQZp2O2YhT1izJ7MK2+RY1TyPLdvsdW1413yUI5JlaP7G4euSirK89zd55fk4A6CLBaLfd2NdJfuVwxwHE9ja2w/tMW183ly8r2c/9YuceNq63IhQdmMH5B4dv4cYSYeqRzyn8ZQnvsnG1pldUqT16hkdo5J3tI+O73xXlsPuhNPezrMsh8o//Y8RZbEA3WHvstEowlqP5S3NNo92dWRT+ho9+q6tsdHSvQZZEEEiWeU7r0ej1xZRyqV7b6rqrJPFkUh1VXqm/QjNtC4fUTHu7Yf436j6rp3mZBjNtzK3xhS2XYmnu1/r31z7xHZ3El0AP1ntTabjVx4oP0CiajtP63Xa7k6mZt53ZEYuZCg/LUxQmPf25hMbcxhuQ/3jfEIuRLUJ51eR+KBOu4kug+JZ5QG777bKeRw2od5DIjEM4AHHMcTDxIP1JF49iHxjNKRJh57/YXDfQWJZwAkng4kHqgj8exD4hmlwbvv/vdCeIzGQR2HQOIZQJ/E0/9+YSND4oE6Es8+JJ5ROvbu+3BIPAPwf+/0I0LigToSzz4knlE69u77cLoSz3Q6vTha5+fnJJ4QkHig7vz8/OzsTLtNCpHPdhLeXBx59304s9lsd+K5vb3VLttjDXsaZ4fr62uDPU5OTvysBWCfm5sb7dYoXN7aSXgzgu77cK6vr/8P5QNviIAeW2YAAAAASUVORK5CYII=" alt="" />
向缓冲区中填充进“hello”字节码后,缓冲区的状态如下:
aaarticlea/png;base64,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" alt="" />
“hello”已经都在缓冲区里了,然后调用get方法读取数据,以缓冲区现在的状态执行绝对读操作是可以的,但是要执行相对读就是有问题的。我们希望的结果是把“hello”读取出来,但是当前的position位置在“hello”之外,一直读的结果就是读到上界然后抛出错误。
解决的方法很简单,在读之前把position置为0,并且把limit置为5,这样读取的区间正好在“hello”范围内。缓冲区API也封装了这个方法flip,用于读写之间的转换。flip后的缓冲区状态如下:
aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAAAvsAAACNCAIAAACmByLsAAAaTElEQVR4nO2dP4jcRhuHJ90VIRyBgElC2CIiJtURUrgQZEl14CIRJP2BSJoUuUJFuq0Gl9couEhgOVRcZQ6RwrhSmUbg0qi6IiCXLlS4nK94fe83lna1sm/nz2p+T3W3u1rNrEYzz7wzmhEKAAAAAGDuCNcJAAAAAAAwDowHAAAAAPMHxgMAAACA+QPjAQAAAMD8gfEAAAAAYP7AeAAAAAAwf5wZT1VVWZYlSZLnuas0uCVJkqZpXKfCHlVVSSnjOM6yrKoq18mxR9u2UsokSaSUQWWcaZpGStl1neuEWEIOCKeWo4o9jmMpZdu2rpNjnK7rhpebCOdmb5rmUK61G+NJ01QIEcdxHMdRFEVRFFTbr25/gbquXSfEEpTfKIroigsh0jR1nSgbFEVBJZwznmWZ60TZJo7jcEp7XddiQBzHrtNlg2HFPvuLvvFyE1JK16kzTp7nVK3R5S6KwnWKduDAeMqy1Bu8uq6jKEqSxH5KXEH1QjhtQFEUPcWhX2D2Hd+2bcl1OLxBGQ+n86eUklJSnRhIaZdSCiGKoqg1QujRUcb5pqaKPQTVq9+mqqpAMk4Ve5IklGvq2JRl6TpdYzgwniRJoijSX8myTAgRQqVQliUVi6BiPNTh670YQqVAHSDdb6hHGELnj6iqisJa4ZT2NE2HpT0Ehh1XGsU+lPGOfUENXAjNWa9i77rO/1rdgfEMfxRqBmbf41dKUby3qirKciBtQNM0w2in//eGCcgAQijqRBzHaZoGVdrpHnedCtvQJfZ/UMM0FPYIpEszrMM3dm69wrbxUJy/VyA2vjhLWPyDagOGUL0Q2owWCvxGURRIr5eiHV3XBVXaKdRBHX1qEkIYxMzznC5xWZZJksRxnCRJCBnvEVRHjgo539cHMUHFtvFsi+oHVVBU2MZDgkttoeu0WILqAprf5/k4976g6XrU5oVT2nkea5qmUsosy+i6z/6i0yQeagJ55nJoUR+ewuU6IZZo25YudJZlVNT9H8SE8bghnDagR13XNJMpqP4fPZ5N0xpCkB6SWo7hhVPaqXjrbR7Jrueh/rtDjb3e4+eOjduE2SS0/HZdxw/hHsoTuB4Zj/8/1h4Jpw3Q4do/KN3Rocl9s68WaVyD/w2ztDMhPKZAxtMbp6ahrkBudpqiF8LcDIb6b3x9D+IhNTczl3tyE9oDLCrINoBXpgkq10Oo/ZvxoxxUtnl0g+BlWmac8W2QDcy72JPc9OrwoCp2mrXm+ZjOHqG5mL2HMPx3XC+e1aLfLpzhTxWe8dAl9n+Ud7/QquLDF+dtPE3TxAMCMZ48zwO84mqL3FDYI5CK3f/wxn7Z6PH+O64D4yEX1u//4Qo9syco46GKL6jqgKAej94NCmRUq0c4pX3bFQ+h8A8fyw8n7EGTloKamLExTuF/8MKB8fBCtLQsDQX5fbZCE4TTBqjbTQbo6ZXQNhuioW5agfdQliXdO0GVdjLaPM9Du+L0dB6twMsVeyArUISzpJxO7+GsruuwHs9m+IEdGu8P5K7QoTm8IbQBTdNEW/B85Ya90LYthTB5f6UQGr8e4ZR2pVTTNMFecZqrF2DFTlupBFLCGX3TQN5JzecAj3K4d7pSqmma0IoICJO2bQPZXAkQIV9xVOzh0LZtlmVkPFmW+T+C6dJ4AAAAAADsAOMBAAAAwPyB8QAAAABg/sB4AAAAADB/YDwAAAAAmD8wHgAAAADMHxgPAAAAAOYPjAcAAAAA8wfGAwAAAID5A+MBAAAAwPwRT58+FaHywQcfuE6CG4LNOAAAzJXlcunaKHxHrFYrIcT5+fnKFl988cXHH39s7XTb+PHHH4UQp6enrhNim7OzMyHEN998Y//Uv/76qxDi+++/t3/q1Wp1fn4ecsYXi4WTs7tFCOFDbWOfjz766OjoyHUqHLBYLMLM+Keffnp0dKRLT1VVO8VoHp9ZrVbvZjw3NzfTLemOeLKh/Hq9FkJcXFy4TohtqLikaWr/1HVdCyGklPZPrZS6ubkJOePfffedk7O7RQjx5Zdfuk6FAz7//PPj42PXqXDAcrkMM+P379//+eefXafCAev1+uzsbOKHXRpPURRSSillVVXWzs64Mp62beUtTnaahfHYP7UPGXdiPHmeO7zHFYwnPGA8oXEYxpMkSRRF9LcQIssyawkgnBhPURRRFHHGoyiy3wrCeOyf2oeMWzaeXlEXQiRJYjMBBIwnNGA8YAQ3xiOEiOO46zqlVNd1Tsa57BvPUDXSNBVClGVpLQ0bk2ENHxr+YDNu03jatiXX4ShmnudOfnwYT2jAeMAIzmI8+oCOlFIIUde1tTQoF8ZDYa3eixTuspYGBeMJNeM2jYdUvjeSReXf8kgujCc0YDxgBC9mLgdiPDyMpUMvWkuDgvGEmnGbxrMxauvkNofxhAaMB4wA47FqPEKIaBPW0qBgPKFm3LLxxHHce5F+BBiPHWA8oRGs8RzGzGX9lXCMZ9gM2AfGY//UPmQcMZ6ggPGExrfffvv333+7ToUDYDyTsG8825oByw0hjMf+qX3IuOV5PMMpOxtfNA2MJzSCNZ7lcvnff/+5ToUDYDyTsG88RVH0WlwnD7DAeOyf2oeM2zQeKmP8PKa6Lfz2H1CH8YQGjCc0YDyTcLIeDz3DQsNb/JS+zQQoGE+oGbe/Ho/zoq5gPOEB4wkN342HlmHVX6mqSkrJ3UE7uFpzuaqqNE3jOE6SpCgKy2dXTo2n6zqHy+86NB4fMm5/zeWqqrIsc1jUFYwnPII1HszjmYID4/EE7KvlOiG2cWg8bsG+Wq5T4QAYT2jgWa0pwHhgPKEA43GdEAfAeEIDxhMaMJ5JwHhcJ8Q2MB7XCXEAjCc0YDxgBBgPjCcUYDyuE+IAGE9owHjACDAeGE8owHhcJ8QBMJ7QgPGAEWA8MJ5QgPG4TogDYDyhAeMBI8B4YDyhAONxnRAHwHhCA8YTGpi5PAkYj+uE2AbG4zohDoDxhEawxoP1eKZgz3jatpVSxnGcZdlwKTZerMzaQm3WjGc843JAnudG02PHeIqiSNM0SZJt2eErTpjOtbJlPHpJ3riHlKuMWzCebXmnBRi3YTRJMJ7QCNZ4sObyFCwZT1EUURTRkvNRFAkh9DVYsyzjBemH7xrCjvGMZ5w2H+hhejF+C8bDuwps216gt9sG/TJRFBndacSC8VC+OFPDHDnMuGnjGck7lfNoC0ZTBeMJDRhPaHhnPL0mtus6qhOpF9i2bRRFvMVg711zWDCe8Yyr2w3FiqKoNZqmMZekYar2TpIkURRxNGu4fyo1jb0ElGVpuv0zbTx0NTlmU9c1mQ1/wG3GjRrPeN4dbisG4wkNGE9oeGc81ATq22ZVVRXHcVmW6nb/cH24h5pk09F+C8YznnGlVJqmpvu4Q4waT9M0w7aNhrd2np1aTXPtomnj0cWdoNFMElznGTdqPON5h/HYB8YTGpjHMwUbxhNF0UgzQzEAfaxn+IoJLBjPeMaVUjQEYC4BGzFqPFLK8fhckiRCiG1xrDzPzYW4jBoPNeojhdZ5xs0Zz868w3jsA+MJDTyrNQXjxsOd/qZpaM/wOI57lSON9VCYp6qq3liAIUwbz5SMU8+YQkGUawuzto0aD+VFKZXnOWU5TVNdgCxM3diGUeOhUGVd12VZJklCG4brV9N5xs0Zz868w3jsA+MJDRjPFIwbD1V21BDqszX1hocmuNDcRpr8qI8EGcK08ezMOE9bTtNUSpllGX2Ax7wMYdR4KJt6rumycgDDjs5uxKjx0MjU8HKz4zrPuDnj2Zl3nrkcv01vIMwEMJ7QgPGAESwZTy/oTRF+6gW2bUtVZJZldV1Twz+DGM/OjNd13Yv60HxP05EA08bTc9ayLKk5pH+dN/xGjUd/QImm5PPVdJ5x08YzkncYj31gPKEB45mCJePp1fU04pNlmbodB9GfzqWG3/S6KXaMZyTjG6HHeYw+q2zBeHpjczzUpTwY3DFqPL0rq8/Kd55x08YzkneMatkHxhMaMJ4pWJrHM+zdcpd3Y9+Xoj6GkkTYmcczkvGNUONxuMZDQaxe+vVMjS89kKapuWf0LMzj6TXqekvvPOOm5/GM5B3GYx8YT2jAeKZg6VmtjQ0/tT1zNR61K+N5ng+j+rQYo9EleUw/qzU0HhqppMZ+Y+uoJ8zcSIeFZ7V6+aIc0cCl84ybflZrJO8wHvvAeEIjWOPxa+ayul11Rm/Fqfan2pCGPPS+b29NQkNYMJ7xjNPfes++6zoLsz2MGg9du96X9zJF4zs9K+LZ6+aeVjO9Hs9wrQEqAFy23Wbc6Ho843mH8dgHxhMaWI9nCjaMh6cxlmVZ1zW19Fw/UgNM6/LVdU1r9BltAAgLxjOecXXbBOZ5rmf8oJ/VUrdhKpqHTrOze5niCdppmtJ60/yc2sgMp7tj2nh4jjZlnKZk6Tlym3GjxjOedxiPfWA8oYE1l6dgaV8tavmi212EevEbbuwJO8vS2NlXazzjTdNQiIszblp3lJV9tbghp1wP16brZZyCQKbzbmFfLdpGjTM19BiHGTe9r9ZI3kn1YDw2gfGEBoxnCvb2TldKtW1b1/W2yZtN01jYVYqxtne62pVxetdaxu3sna6Uou7+lM+Y3kONsLN3urotyeOfsZ9xC3unq2l5twmMJzRgPKHxPsZzdXVVBcYff/whhPjtt99cJ8Q2FxcXQoiHDx+6Tohtrq6uQs74ycmJ64Q4QAjx2WefuU6FAz755JMPP/zQdSoccHJyEmbGv/rqK8zj2Yl4/PixAAAAAMAhs1wuexr08uVLbuxfvHixUZUO/TMXFxfvYDyvXr3a+I12+Omnn1xFWZ49e3ZxceHk1M65uLh49uyZ61Q44M8///znn39cp8IBwWb8r7/+evLkiZNTP3ny5Ouvv3Zy6qqqLi8vA4zcV1V1eXl5eXnpOhUOuLy8fPDgwfJtnj59yo39o0ePlpuYwWeurq6mGs/Ez5ng5cuXR0dH9+7de/36tcNkAADA3jk/PxdCXF9fu04IAOANLo2HagRha/owAADYgbpzQoiTkxPXaQHAMa9evXKdhDc4Mx6uEYQQCPMAAOYEd+cQ5gGBc319fX5+7joVb3BmPHqNgDAPAGA26N05IcT9+/fRowPBcnJycnR0pM81dogb4+nVCAjzAABmQ687hx4dCJbr62u6BTwJ87gxnmGNgEoBADADht059OhAsJycnNAt4EmYx4HxbKwRUCkAAGbAxu4cenQgQDjA40+Yx4HxbKsRUCkAAA6abd059OhAgHCAx58wjwPjefTo0eqW4+PjxWLB/z5+/Nh+egAAYC/8+++/XJv98MMPQojff/+dX3nx4oXrBAJgiV6Ax5Mwj8v1eJRSi8ViuVy6TQMAAOwd2qvYzibNAPhGL8DjSZgHxgMAAPsHxgOCZWOAx4cwD4wHAAD2D4wHBMvV1RUP5i4Wi+PjY/730aNHDhMG4wEAgP0D4wFAKbVcLheLhetUvAHGAwAA+wfGA4CC8ejAeAAAswTGA4CC8ejAeAAAswTGA4CC8ejAeAAAswTGA4CC8ejAeAAAswTGA4CC8ejAeAAAswTGA4CC8ejAeAAAswTGA4CC8egsFgt9Xy1wR7AVKwCeAOMBQMF4dJbL5ba1qMH7gRoWAB+A8QCgYDzAEKvVCjUsAJ4A4wFAwXiAIWA8APgDjAcABeMBhoDxAOAPMB4AFIwHGALGA4A/wHgAUDAeYAgYDwD+AOMBQMF4gCFgPAD4A4wHAAXjAYaA8QDgDzAeABSMBxgCxgOAP8B4AFAwHmAIGA8A/gDjAUDBeIAhYDwA+AOMBwAF4wGGgPEA4A8wHgAUjAcYAsYDgD/AeABQMB5gCBgPAP4A4wFAwXiAIWA8APgDjAcABeMBhoDxAOAPMB4AFIwHGALGA4A/wHgAUDAeYAgYDwD+AOMBQMF4gCFgPAD4A4wHAAXjAYaA8QDgDzAeABSMBxgCxgOAP8B4AFAwHmAIGA8A/gDjAUDBeIAhYDwA+AOMBwAF4wGGgPEA4A8wHgCU/8bz/Pnz5YGzXq+t/5LugfGAwLm5uTk9PXVd/bzh/v37QogHDx64Tsgbzs7OXr9+7foSgeBYem48q9Xq7OysOlguLi6Wy6Wdn+/6+lqALRwfH9u5CgAQ6/X69PTUdQ30hqurq19++cV1Kv7PvXv30B2aPTc3NyvPWCwWx8fHrlOxWq1W19fXm41ntVpZv1J7o6oqa8azXq/Pzs7snGsKL1++dJ2E/yMExkyBVXy7H71isVjAeGbParVaLpcOrWLIw4cPHzx44DoVq/Pz88ViAeO5E6hhR4DxAMvgfhwBxhMCh958m+Pm5saB8TRNE8dx0zR7+ba2bZMk6b0I4/EEGA+wzB7vR72mStM0TdN3OjxJkjzP9W+bcpR8G/0b7g6MJwRgPNtwYzx1XQsh6rrey7fFcRxFUe/FeRtPFEVSSvq7qiquSfXX905VVfRTv9NZYDzAMnu8H/WaKkmSYc9qHP1OieN4yl3TNI0QItZ4V80aB8YTAp4bj5Syqqo9fmGe51LKoih2fvKwjUdvg4dvzdh4uO/Y+yV7fco90rZtFEVpmtZ1nee5EGKi9MB4gGUMGc8dmdhPKIpiWJvtERhPCHhuPHwvdF2XJMld7q+maUgAyATiOB7//CTjyfO8qqqyLJMkieOYTIr/LcuSj2rbNssy6ppkWda2Lb1eVVWe52VZ0uu9eqQsSyll13V0roltdl3XURRlWZZlWWjGw+w3WjZCmqZ6YZJSTqyXYTzAMoaMh6umruuovqK6Lk1Tquj4Xz6c+7J0vyRJQhV9VVXb7EdKubPWvgswnhDw3Hjquqbm/u7tF0kI/d11HSnByOcnGQ/HV6WUaZoKIaj9k1ImSSKEoLuawgB0V9N9y40i3fCkYOR0nM+iKIQQHI+aHjruuo4qmo2tr2/Gk6ZpnuckZxQs0d8lF6S39AumB7GSJOHRK4rl0CQDioHTF+oxnqZpkiThY9k+8zxP05TP2HPWbVGiXg91ekmF8QDLGDIeqgPVbV+LbjqqfHj4iW5wrsH4rukZz0iHgWpIqmB79+ZegPGEwBTjIe0e1vZFUVALrk87a5qGGlx6i1uT8aP0t/QhJzYebv2bW/QD27alV7qu29bW9FpMvkm3MdV4oiiiJNI59NtVv6v1k+mVhZRSCMF3L79FIdwpw28jHITx0G9I3UHyGK4WeZCoruuyLLnGJIOkkFhd1/q15N9cLzH66xTro0EoOpavINfRVVXxW5zOicZDr8B4gIdYMB4hBNezdA/yXZPnOd9Q+l0zcVSLuz3cvdzvzDwYTwjsNB7u7lJ5oxKujxBRX5oLOQk9tSl0FLfaI0dR32A45ET3Qq/Hrt84fFL6qpEeAqWHI0Y777J3iPHo6ej9OzwHz/Zg49FTzFWGHt15bw7IePjfqqqEEKwpesiH3iId0a2iaRquVfm69mIt/Loe61Nvh/vIPtmmJ0Zrhn4zsQaH8QDL2DEevh2G/97FeCh2y/9SM7OXvBAwnhAYNx7dEpTWWPQGWPTpIqQmPN1Yb3PHj+KmTW+DRtovfYyC26mRGA8lgKVq5zT/PRsP3Z+sdePGw1Y4nkQ9V0Sv4jgU4+ldDPbcoXBwHnlMqigKPZC403iGvxL/1MOfa0q0Joqi3uz6icE5GA+wzEEbz0gC9gKMJwTGjadXFNkn2rZlDVIDd+m11Fz/bztqWHR53Gpb+6V31GlW3M6cUnPGMdGdrdI+jYfOV5Yltc29Ua2h8ZRlSQGxiQ9t1rfov+/wywkPjWc4KkQjWSPGw7MjSX3YmZwYj/6FNOKGUS3gIQdtPL17CsYD3oOdxrOtROV5TuWc4wv0+rb2a+Soqqq2hSe3tV90CPmDHu/ZBjVD+sd2xkT3aTy9mBINb48Yj/7WXVYjPBTj6c3IJhula9bTUi4QelyHRgkp0DLFeHohpTsaDw+pEnrRHAfGAyxzuMZDEV+9NsCoFngPdhrPxuVwaCBFSllVFU1S1o2n9wxUpM2g2HiUfiMME7Cx/eK3RmxJZ3iKnT2EfRoP5bwsS5rEE0URt9AjxtP7wvdY2PRQjCfSZn/T70PG0JMhMpumaWhaN1sFudFE46GKkk9HJYNc+P2Mh47iL+w9rD4CjAdYxlvj4aoyz/NtT6RyZL6ua5pyd/eZjjownhDYaTy6vlBDM7TtkVEtnowxchS9patVmqZU7EeMhw7nT45Dh+un6DWaQyYZT89Chv9yWIln29BDSfw0Zu8O7+0yQc8u0ZNc72E8G6sPP40n1p7w51JCVST9VvSWPkOeDpFS6mWuV5NyREd/nY+lMsTHjhvPSE+Uv5Aq5YmLZsJ4gGVM7zLRq76G/3J1pD/5WBQF921GjEe9vZYHnk4H78G48VAB4zVleI6pPjJATw3rxsMPJNIhemO07Sial0P+QWEbavW4lSEr0mfrU8e+176MrF9FKdFPMa5KbtZctoCHxkP1Fy220dMFCgZSyeu9RZVj76Fxqa3STes3cvxGP5yP1R18WHrk7fKPw2/owWusTR+FhPEAy2CfuxFgPCGws/nmleF0X6EACUGtBptHfAu/y181cpTa8shRr2fe+8J4sG3UxmEcggIrw7xsA8azB6Ybj530eAWMB1gGxjMCjCcEJjbfdV0PB4A2vsjtV9M0G8eMNh6lv7szMfq5xtdNHtK27cRTwHj2AIxnBBgPsAyMZwQYTwjsvfm21n5Nfybm/YDx7IGJu0zsdw/kQwHGAywD4xkBxhMCB2o89LTTuwZ43gkYzx5ADTsCjAdYBvfjCDCeENh78z3c9MoEtN6e0VOMGc/Z2Vl1sFxcXMB4fADGAyyzXq9PT09d10Cecu/ePRjP7Dn0gIU5thrP8+fPlwfOer228yOu1+t79+65zq6nwHiAZW5ubk5PT10XfE85Ozt7/fq160sEzALj2cZW4wHTef36teuem788f/7c9fUBAICAWK/XAmxhuVz+D3f5bgBPl5zBAAAAAElFTkSuQmCC" alt="" />
这样我们就可以顺利的读出缓冲区的内容。
@Test4 压缩
/**
* 缓冲区压缩
* 压缩适用于这样的情况:缓冲区被部分释放后需要继续填充,
* 此时剩下的未读数据需要向前移动到索引0的位置。
* 通过源码可以看到compact()方法做了3件事:
* 1.将未读数据复制到缓冲区索引0开始的位置
* 2.将position设置为未读数据长度的索引位置
* 3.将limit设置为缓冲区上限
*/
public void testCompact()
{
ByteBuffer bb = ByteBuffer.allocate(8);
bb.put((byte)'h').put((byte)'e').put((byte)'l').put((byte)'l').put((byte)'o').put((byte)'!');
bb.flip();
bb.get(); //释放部分数据
bb.compact(); //压缩
bb.put((byte)'a'); //继续填充数据
bb.flip(); //压缩后如需读取,依然需要flip
while(bb.hasRemaining())
{
System.out.print((char)bb.get()); //遍历结果: ello!a
}
}
上面的例子进行如下的图解,当调用bb.get()后,缓冲区的情况是这样的:
aaarticlea/png;base64,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" alt="" />
然后调用compact()方法后,缓冲区变成下面的情况:
aaarticlea/png;base64,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" alt="" />
@Test5 缓冲区比较
/**
* 比较两个缓冲区相等 有equals和compareTo方法
* equals方法成立的条件如下:
* 1. 两个对象类型相同。包含不同数据类型的 buffer 永远不会相等,而且 buffer
* 绝不会等于非 buffer 对象。
* 2. 两个对象都剩余同样数量的元素。Buffer 的容量不需要相同,而且缓冲区中剩
* 余数据的索引也不必相同。但每个缓冲区中剩余元素的数目(从位置到上界)必须相
* 同。
* 3. 在每个缓冲区中应被 Get()方法返回的剩余数据元素序列必须一致。
* 简单的说就是比较当前position到limit区间的数据元素
*
* compareTo方法返回值-1,0,1
* 针对每个缓冲区剩余元素进行比较,直到不相等的元素被发现或者到达缓冲区的上界。
* 如果在一方达到上界还没有出现不相等的元素,元素个数少的缓冲区视为小。
*/
public void testEqualsAndCompare()
{
ByteBuffer buffer1 = ByteBuffer.allocate(8);
ByteBuffer buffer2 = ByteBuffer.allocate(8);
buffer1.put((byte)'h').put((byte)'e').put((byte)'l').put((byte)'l').put((byte)'o');
buffer2.put((byte)'m').put((byte)'e').put((byte)'l').put((byte)'l').put((byte)'o').put((byte)'w');
buffer1.position(0);
buffer2.position(0);
System.out.println("equals: " + buffer1.equals(buffer2)); //结果false
System.out.println("compare: " + buffer1.compareTo(buffer2)); //结果-1
//两个缓冲区设定区间比较
buffer1.position(1).limit(4);
buffer2.position(1).limit(4);
System.out.println("equals: " + buffer1.equals(buffer2)); //结果true
System.out.println("compare: " + buffer1.compareTo(buffer2)); //结果0
buffer1.put(1, (byte)'z');
System.out.println("equals: " + buffer1.equals(buffer2)); //结果false
System.out.println("compare: " + buffer1.compareTo(buffer2)); //结果1
}
缓冲区的创建和复制
缓冲区提供了几种创建的方式:
@Test6 创建间接缓冲区
/**
* 分配操作创建一个缓冲区对象并分配一个私有的空间来储存容量大小的数据元素。
*/
public void testAllocate()
{
ByteBuffer bb = ByteBuffer.allocate(100); //这段代码隐含地从堆空间中分配了一个byte型数组作为备份存储器来储存100个byte变量。 }
@Test7 包装缓冲区
/**
* 包装操作创建一个缓冲区对象但是不分配任何空间来储存数据元素。
* 它使用您所提供的数组作为存储空间来储存缓冲区中的数据元素
*/
public void testWrap()
{
byte[] bytes = new byte[6];
ByteBuffer bb = ByteBuffer.wrap(bytes);
/**
* 对缓冲区的修改会影响数组,对数组的修改同样会影响缓冲区的数据
*/
bb.put((byte)'h').put((byte)'e').put((byte)'l').put((byte)'l').put((byte)'o').put((byte)'!');
bb.flip();
for(byte b : bytes)
{
System.out.print((char)b); //结果hello!
}
System.out.println();
bytes[0] = (byte)'a'; //改变数组第0项
while (bb.hasRemaining())
{
System.out.print((char)bb.get()); //结果aello!
}
/**
* 带参数的包装方法
*/
ByteBuffer bp = ByteBuffer.wrap(bytes, 2, 2);
/**
* 带参数的包装方法wrap(array, offset, length)并不意味着取数组的子集来作为缓冲区,
* offset和length属性只是设置了缓冲区初始状态;上面代码表示创建了posion为2,limit为4,
* 容量为bytes.length的缓冲区
*/
}
@Test8 间接缓冲区的备份数组
/**
* 通过allocate和wrap方法创建的缓冲区都是间接缓冲区,
* 间接缓冲区中使用备份数组,对于缓冲区备份数组java也提供了一些api
*/
public void testBufferArray()
{
byte[] bytes = new byte[6];
ByteBuffer bb = ByteBuffer.wrap(bytes);
if(bb.hasArray()) //hasArray()方法判断缓冲区是否有备份数组
{
byte[] byteArr = bb.array(); //array()方法能够取得备份数组
System.out.println(bytes == byteArr);
System.out.println(bb.arrayOffset()); //arrayOffset()方法返回缓冲区数据在数组中可以存储的开始位置
} /**
* 能够获得缓冲区的备份数组就获得了对缓冲区进行存取的权限,当缓冲区被设为只读的时候,
* 无疑是不允许得到备份数组的。
*/
ByteBuffer bRead = bb.asReadOnlyBuffer();
System.out.println(bRead.hasArray()); //输出为false
}
@Test9 缓冲区的复制
/**
* Duplicate()方法创建了一个与原始缓冲区相似的新缓冲区,
* 两个缓冲区共享数据元素,对一个缓冲区数据的修改将会反映在另一个缓冲区上,
* 但每个缓冲区拥有自己独立的position、limit、mark属性,
* 如果原始缓冲区是只读的或者直接缓冲区,复制的缓冲区将继承这些属性。
*/
public void testDuplicate()
{
ByteBuffer orginal = ByteBuffer.allocate(8);
orginal.position(3).limit(7).mark().position(5);
ByteBuffer duplicate = orginal.duplicate();
orginal.clear();
System.out.println("orginal,position: " + orginal.position() +
"; limit: " + orginal.limit() +
"; mark: " + orginal.position()); //结果 orginal,position: 0; limit: 10; mark: 0
System.out.println("duplicate,position: " + duplicate.position() +
"; limit: " + duplicate.limit() +
"; mark: " + duplicate.reset().position()); //结果 duplicate,position: 5; limit: 8; mark: 3
//前面提到的asReadOnlyBuffer方法得到的只读缓冲区同duplicate类似
}
上例中原缓冲区和复制缓冲区的情况如下图:
aaarticlea/png;base64,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" alt="" />
@Test10 缓冲区的分割
/**
* slice方法将对缓冲区进行分割,从原始缓冲区当前位置开始,直到上限
* 也就是position到limit的区间创建了新的缓冲区,新缓冲区和原始缓冲区共享一段数据元素,
* 也会继承只读和直接属性。
*/
public void testSlice()
{
ByteBuffer orginal = ByteBuffer.allocate(10);
orginal.position(3).limit(8);
ByteBuffer slice = orginal.slice(); //分割了3-8的数据元素
}
上例分割后的缓冲区如下图:
aaarticlea/png;base64,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" alt="" />
Java NIO(1):迟迟登场的NIO
Java NIO(2):缓冲区基础的更多相关文章
- Java NIO 之缓冲区
缓冲区基础 所有的缓冲区都具有四个属性来 供关于其所包含的数据元素的信息. capacity(容量):缓冲区能够容纳数据的最大值,创建缓冲区后不能改变. limit(上界):缓冲区的第一个不能被读或写 ...
- Java NIO之缓冲区Buffer
Java NIO的核心部件: Buffer Channel Selector Buffer 是一个数组,但具有内部状态.如下4个索引: capacity:总容量 position:下一个要读取/写入的 ...
- Java NIO——2 缓冲区
一.缓冲区基础 1.缓冲区并不是多线程安全的. 2.属性(容量.上界.位置.标记) capacity limit 第一个不能被读或写的元素 position 下一个要被读或写的元素索引 mark ...
- Java NIO 网络编程基础
Java NIO提供了一套网络api,可以用来处理连接数很多的情况.他的基本思想就是用一个线程来处理多个channel. 123456789101112131415161718192021222324 ...
- Java NIO之缓冲区
1.简介 Java NIO 相关类在 JDK 1.4 中被引入,用于提高 I/O 的效率.Java NIO 包含了很多东西,但核心的东西不外乎 Buffer.Channel 和 Selector.这其 ...
- Java NIO Buffer缓冲区
原文链接:http://tutorials.jenkov.com/java-nio/buffers.html Java NIO Buffers用于和NIO Channel交互.正如你已经知道的,我们从 ...
- Java NIO ———— Buffer 缓冲区详解 入门
引言缓冲区是一个用于特定基本类型的容器.由java.nio 包定义,所有缓冲区都是 Buffer 抽象类的子类. Java NIO 中的 Buffer ,主要用于与NIO 通道进行交互.数据从通道存入 ...
- Java NIO通信的基础,基于TCP C/S例子介绍
为了更好的理解Netty异步事件驱动网络通信框架,有必要先了解一点Java NIO原生的通信理论,下面将结合基于TCP的例子程序,含客户端和服务端的源码,实现了Echo流程. Java NIO的核心概 ...
- Java NIO -- 直接缓冲区与非直接缓冲区
直接缓冲区与非直接缓冲区: 非直接缓冲区:通过 allocate() 方法分配缓冲区,将缓冲区建立在 JVM 的内存中直接缓冲区:通过 allocateDirect() 方法分配直接缓冲区,将缓冲区建 ...
- Java NIO流 -- 缓冲区(Buffer,ByteBuffer)
用来定义缓冲区的所有类都以Buffer类为基类,Buffer定义了缓冲区的基本特征. 直接子类: ByteBuffer 用来存储byte类型的缓冲区,可以在这种缓冲区中存储任意其他基本类型的二进制值( ...
随机推荐
- iOS 常用的#define合集
1.定义常量 定义常量的时候最好以小写字母k开头,让人见名知意, (1)导航栏高度:我们都知道iPhone竖屏时候导航栏的高度为44,这时候可以定义一个常量来表示该高度, #define kNaivg ...
- nginx+lua+redis
git clone --branch master https://github.com/openresty/lua-resty-redis.git yum install openssl opens ...
- windows下硬盘的逻辑结构
共有五部分组成: MBR:主引导分区(硬盘启动记录) DBR:DOS启动记录 FAT: 文件分配表 DIR:根目录区 DATA:数据区
- 【云计算】mesos+marathon 服务发现、负载均衡、监控告警方案
Mesos-dns 和 Marathon-lb 是mesosphere 官网提供的两种服务发现和负载均衡工具.官方的文档主要针对DCOS,针对其它系统的相关中文文档不多,下面是我在Centos7上的安 ...
- 如何注册ocx文件
32位系统: 将文件放到c:\windows\system目录注册 运行:Regsvr32 c:\windows\system\xxx.ocx取消注册运行:Regsvr32.exe /u c:\win ...
- 【Java】Java_12 Eclipse
1.eclipse简介 Eclipse 是一个开放源代码的.基于Java的可扩展开发平台.就其本身而言,它只是一个框架和一组服务,用于通过插件组件构建开发环境. 尽管 Eclipse 是使用Java语 ...
- 虚拟机下安装CentOS无法上网的解决方式
我使用VMware虚拟机安装Ubuntu和CentOS,都使用NAT模式连接网络,可是Ubutun能够正常上网,而CentOS不能连接到网络. 原来Centos7默认是不启用有线网卡的.须要手动开启. ...
- ibatis 动态列查询问题解决
http://hi.baidu.com/java513/blog/item/ace7c516c400390d4a90a7c8.html 这个问题是因为你查询的sql的列是变化的,但是ibati ...
- Python绘制分段函数
1.绘制分段函数:y=4sin(4πt)-sgn(t-0.3)-sgn(0.72-t) import numpy as npimport matplotlib.pyplot as plt#绘制分段函数 ...
- svn your working copy appears to be locked run cleanup to amend the situation
cleanup 则解决