日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁技術文章
文章詳情頁

Java之Buffer屬性案例詳解

瀏覽:22日期:2023-02-13 13:00:49
一、前言

熟悉NIO的人想必一定不會陌生buffer中position,limit,capacity這三個屬性吧,之前在學習的時候遇到一個問題:就是當你先往緩沖區寫入一部分數據,然后調用flip()方法,再全部讀取完數據,然后再調用flip()方法,此時這三個值的變化是怎樣的,研究了一下,決定寫下來分享一下。

二、正文1、介紹 position: 它指的是下一次讀取或寫入的位置。 limit: 指定還有多少數據需要寫出(在從緩沖區寫入通道時),或者還有多少空間可以讀入數據(在從通道讀入緩沖區時),它初始化是與capacity的值一樣,當調用flip()方法之后,它的值會改變成position的值,而position被置0。它箭頭所指的位置是最后一位元素的下一位所在的位置* capacity: 指定了可以存儲在緩沖區中的最大數據容量,實際上,它指定了底層數組的大小,或者至少是指定了準許我們使用的底層數組的容量,這個初始化后就不會再改變了。2、圖示

以上三個屬性值之間有一些相對大小的關系:0 <= position <= limit <= capacity。如果我們創建一個新的容量大小為7的ByteBuffer對象,在初始化的時候,position設置為0,limit和 capacity被設置為7,在以后使用ByteBuffer對象過程中,capacity的值不會再發生變化,而其它兩個個將會隨著使用而變化。三個屬性值分別如圖所示:

初始化:

Java之Buffer屬性案例詳解

假設我們現在要往這個緩沖區里面寫入3個字節,寫完之后,position的箭頭就會指向3的位置,而limit不變:

Java之Buffer屬性案例詳解

此時我們想從緩沖區讀取這3個字節,就必須調用flip()方法,調用了flip()方法過后,limit置為position的位置,而position被置為0,也正應證了上面所說的,position它指的是下一次讀取或寫入的位置,limit它箭頭所指的位置是最后一位元素的下一位所在的位置:

Java之Buffer屬性案例詳解

現在我們可以調用get()方法,一直從緩沖區里面取數據,直到取完為止,也就是當position與limit的值一樣時,就取完了:

Java之Buffer屬性案例詳解

這一次簡單的讀寫操作就完成了,如果想恢復成初始狀態的話,可以調用clear()方法:

Java之Buffer屬性案例詳解

之前學到這里的時候有個疑問,不知道大家想過沒有,就是我們在調用了get()方法從緩沖區取完里面的數據,立馬去調用flip()方法,那這三個屬性的值會是什么變化?如果當我只讀了2個字節的數據之后,就不讀了,然后再去調用flip(),這三個值又會是怎么變化?其實不管怎么繞,你只要懂得原理,就不難,咱們先看flip()源代碼做了什么:

public final Buffer flip() {limit = position;position = 0;mark = -1;return this; }

這里不難發現,調用flip()方法,無非就是給這幾個變量賦值,將當前的position值賦給limit,然后將position的值置為0,Mark是一個標志變量,咱們以后會提到。熟悉以上代碼就不難解決我提出的2個問題:

當你讀取完調用flip()的方法      positon:0    limit:3       capacity:7 當你讀取2個字節之后調用flip()方法       positon:0    limit:2       capacity:7

這里就解決了我之前遇到的這三個屬性值變化的問題!!!

三、測試代碼

讀取完調用flip:

package com.cing.nio; import java.io.FileInputStream;import java.nio.Buffer;import java.nio.ByteBuffer;import java.nio.channels.FileChannel; public class NioTest1 { public static void main(String[] args) throws Exception{ FileInputStream fis = new FileInputStream('D:A.txt');FileChannel fc = fis.getChannel(); ByteBuffer buffer = ByteBuffer.allocate(7);output('初始化', buffer); fc.read(buffer);output('調用READ方法', buffer); buffer.flip();output('第一次調用flip', buffer); while (buffer.remaining() > 0) { byte b = buffer.get();}output('get()', buffer); buffer.flip();output('第二次flip', buffer); fis.close(); } public static void output(String step, Buffer buffer) {System.out.println(step + ' : ');System.out.println('buffer: ' + buffer + ', '); }}

輸出結果為:

初始化 : buffer: java.nio.HeapByteBuffer[pos=0 lim=7 cap=7], 調用READ方法 : buffer: java.nio.HeapByteBuffer[pos=3 lim=7 cap=7], 第一次調用flip : buffer: java.nio.HeapByteBuffer[pos=0 lim=3 cap=7], get() : buffer: java.nio.HeapByteBuffer[pos=3 lim=3 cap=7], 第二次flip : buffer: java.nio.HeapByteBuffer[pos=0 lim=3 cap=7],

讀取2字節之后調用flip:

package com.cing.nio; import java.io.FileInputStream;import java.nio.Buffer;import java.nio.ByteBuffer;import java.nio.channels.FileChannel; public class NioTest1 { public static void main(String[] args) throws Exception{ FileInputStream fis = new FileInputStream('D:A.txt');FileChannel fc = fis.getChannel(); ByteBuffer buffer = ByteBuffer.allocate(7);output('初始化', buffer); fc.read(buffer);output('調用READ方法', buffer); buffer.flip();output('第一次調用flip', buffer); while (buffer.remaining() > 1) { byte b = buffer.get();}output('get()', buffer); buffer.flip();output('第二次flip', buffer); fis.close(); } public static void output(String step, Buffer buffer) {System.out.println(step + ' : ');System.out.println('buffer: ' + buffer + ', '); }}

輸出結果為:

初始化 : buffer: java.nio.HeapByteBuffer[pos=0 lim=7 cap=7], 調用READ方法 : buffer: java.nio.HeapByteBuffer[pos=3 lim=7 cap=7], 第一次調用flip : buffer: java.nio.HeapByteBuffer[pos=0 lim=3 cap=7], get() : buffer: java.nio.HeapByteBuffer[pos=2 lim=3 cap=7], 第二次flip : buffer: java.nio.HeapByteBuffer[pos=0 lim=2 cap=7],

NIO的知識學起來還是比較有趣的,期待下次與大家分享這塊的知識!

到此這篇關于Java之Buffer屬性案例詳解的文章就介紹到這了,更多相關Java之Buffer屬性內容請搜索好吧啦網以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持好吧啦網!

標簽: Java
相關文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
久久精品国产网站| 欧美日韩一二| 久久婷婷av| 国产拍在线视频| 精品网站aaa| 高清日韩欧美| 日韩欧美精品一区| 群体交乱之放荡娇妻一区二区| 国产一区国产二区国产三区| 欧美激情五月| 中国字幕a在线看韩国电影| 女生影院久久| 欧美日韩一区二区综合| 国产一区亚洲| 欧美日韩少妇| 免费久久精品视频| 日韩国产一区二| 日韩av网站在线观看| 国产日韩一区二区三区在线播放| 国产精品一区二区精品视频观看| 久久精品伊人| 在线精品视频在线观看高清| 亚洲二区在线| 少妇精品久久久一区二区| 久久亚洲黄色| 国产99久久久国产精品成人免费| 日韩一级精品| 国产欧美日韩免费观看| 高清不卡一区| 亚洲欧美日韩精品一区二区| 天堂av一区| 午夜av成人| 91麻豆精品激情在线观看最新| 91中文字幕精品永久在线| 黄色国产精品| 免费一级欧美在线观看视频| 欧美日韩国产传媒| 国产精品日韩精品中文字幕| 99久精品视频在线观看视频| 国产美女久久| 丝袜诱惑制服诱惑色一区在线观看 | 不卡一区综合视频| 亚洲精品伊人| 啪啪国产精品| 国产精品亚洲综合在线观看| 一区二区亚洲精品| 伊伊综合在线| 国产精品99久久免费| 亚洲图片久久| 精品在线91| 欧美男人天堂| 国内精品麻豆美女在线播放视频| 欧美一级久久| 亚洲精选av| 欧美1区2区3区| 久久影院午夜精品| 麻豆久久久久久| 偷拍亚洲精品| 天海翼精品一区二区三区| 在线亚洲国产精品网站| 久久国产毛片| 日韩电影免费网站| 97国产成人高清在线观看| 精品日产乱码久久久久久仙踪林| 欧美在线首页| 欧美视频久久| 国产高清亚洲| 成人影视亚洲图片在线| 精品三级在线| 久久亚洲国产| 欧美日韩国产欧| 中文字幕一区二区三区四区久久| 91精品91| 视频在线观看一区二区三区| 午夜一级久久| 最新亚洲国产| 欧美激情 亚洲a∨综合| 国产精品成人a在线观看| 特黄毛片在线观看| 在线 亚洲欧美在线综合一区| 午夜国产精品视频免费体验区| 伊人成人在线视频| 亚洲国产日韩欧美在线| 一本色道精品久久一区二区三区| 中文字幕亚洲在线观看| 欧美日韩高清| 欧美激情视频一区二区三区在线播放| 日韩一区精品| 91欧美在线| 亚洲精选91| 四季av一区二区凹凸精品| 亚洲精品va| 久久av导航| 婷婷六月综合| 国产欧美日韩一级| 美女毛片一区二区三区四区| 一本综合精品| 久久xxxx| 欧美~级网站不卡| 欧美亚洲精品在线| 国产日韩在线观看视频| 五月综合激情| 久久精品 人人爱| 亚洲影视一区二区三区| 91精品国产调教在线观看 | 你懂的亚洲视频| 美女网站久久| 在线日韩中文| 久久麻豆精品| 久久久久久久久99精品大| 国产欧美日韩免费观看| 日韩一区亚洲二区| 成人在线免费观看91| 成人国产精品| 野花国产精品入口| 欧美黄色网页| 欧美午夜网站| 日韩高清不卡一区二区| 视频一区二区三区在线| 欧美中文一区二区| 国模精品一区| 久久久久久久久丰满| 亚洲一级二级| 日韩欧美一区二区三区免费观看| 久久国内精品自在自线400部| 91成人网在线观看| 久久xxxx| 88久久精品| 美女久久久久久| 日本激情一区| 欧美aa国产视频| 性一交一乱一区二区洋洋av| 亚洲调教视频在线观看| 日韩中文欧美| 精品一区在线| 日韩激情av在线| 日本欧美不卡| 亚洲另类黄色| 国产精品一区二区精品| 精品三级久久久| 视频一区中文| 欧美日韩网址| 久久久久蜜桃| 日本成人精品| 精品视频免费| 日韩视频中文| 亚洲精品欧美| 日韩不卡视频在线观看| 亚洲精品一二三区区别| 日韩精品五月天| 欧美日韩免费看片| 影音先锋久久精品| 欧洲一区二区三区精品| 中文字幕一区二区三区四区久久| 色综合五月天| 国产美女撒尿一区二区| 色综合视频一区二区三区日韩 | 国产成年精品| 精品国产亚洲一区二区三区在线| 四虎成人av| 亚洲一区观看| 日本不卡视频在线观看 | 综合国产在线| 国产粉嫩在线观看| 日韩欧乱色一区二区三区在线| 国产精品视频一区二区三区| 色婷婷精品视频| 国产精品一区二区av日韩在线| 四虎884aa成人精品最新| 日本成人一区二区| 午夜精品久久久久久久久久蜜桃| 亚洲我射av| 国产精品7m凸凹视频分类| 久久国内精品视频| 热久久国产精品| 欧美手机在线| 色爱综合网欧美| 国产欧美激情| 日韩三级一区| 免费日韩av片| 1000部精品久久久久久久久| 欧美激情日韩| 亚洲精品免费观看| 欧美日一区二区| 日韩在线综合| 欧美激情在线精品一区二区三区| 视频在线观看91| 欧美a级片一区| 日本а中文在线天堂| 欧美a在线观看| 国产美女久久| 日本午夜精品一区二区三区电影 | 日韩电影在线视频| 精品欧美视频| 麻豆传媒一区二区三区| 国产精品午夜av| 欧美激情福利| 免费视频一区二区三区在线观看| 日韩福利在线观看| 国产欧美视频在线|