辛星2018年nio教程第六篇:FileChanne梳理

先打個小廣告棒拂,關(guān)注辛星教程,我的微信號xinxing0913酥夭,該項(xiàng)目源碼所在的github地址: https://github.com/xinxing0913/xinxing-nio-guide芹血。

我們前面一直使用的是FileChannel遮精,這里我們來做一個梳理吧。它是java的nio中用于連接文件的通道旺嬉,我們通過文件通道可以讀寫文件的數(shù)據(jù)管行。不過它不可以被設(shè)置為非阻塞模式,它只能被設(shè)置為阻塞模式邪媳。

我們打開一個文件通道可以使用如下方式:

RandomAccessFile file = new RandomeAccessFile("xxxx", "rw");
FileChannel channel = file.getChannel();

我們把數(shù)據(jù)從文件通道讀取到ByteBuffer中的時候捐顷,我們可以首先開辟一個Buffer,然后我們調(diào)用Channel的read方法來讀取即可雨效,read的返回值表示讀取的字節(jié)數(shù)迅涮。范例代碼:

FileChannel channel = xxxx.getChannel();
ByteBuffer buffer = ByteBuffer.allocate(xxx);
int readNum = channel.read(buffer);

向文件通道中寫入數(shù)據(jù)的時候,范例代碼:

FileChannel channel = xxxx.getChannel();
ByteBuffer buffer = ByteBufffer.allocate(xxx);
channel.write(buffer);

別忘記關(guān)閉通道徽龟,一般我們調(diào)用它的close方法即可叮姑,如下所示:

channel.close();

我們可以使用通道的position()方法來獲取其位置,我們也可以用position(int pos)方法來設(shè)置其位置据悔,如下所示:

long pos = channel.position(); // 獲取當(dāng)前位置

channel.position(pos + 2); // 設(shè)置當(dāng)前位置

我們可以使用通道的size()方法獲取當(dāng)前文件的大小传透,如下所示:

long size = channel.size();

我們可以使用通道的truncate()方法進(jìn)行截斷,如下所示:

channel.truncate(1024);

它還有一個force方法屠尊,它表示強(qiáng)制把數(shù)據(jù)刷到磁盤上,如下所示:

channel.force(true);

我們首先來看一下demo08.txt文件中的內(nèi)容把耕拷,如下所示:

首先跟大家說一聲抱歉讼昆,來的太遲了,夢之都經(jīng)歷了較長時間的重構(gòu)骚烧,主要是最近太忙了浸赫。在重構(gòu)之后,整站使用Spring Boot + Bootstrap開發(fā)赃绊,管理頁面使用Spring Boot + Vue開發(fā)既峡。夢之都只為提供優(yōu)秀的學(xué)習(xí)資源,將來會開啟視頻 + pdf + 文章的教程模式碧查。
最近的工作趨于穩(wěn)定运敢,因此也會在周末保持一定的更新頻率校仑。如果您周末有時間,也不妨隨時來看看传惠。學(xué)無止境迄沫,在技術(shù)前進(jìn)的道路上,與君共勉卦方。
專題相關(guān)的內(nèi)容會在近期整理后上線羊瘩,最近在不斷的整理中,第一期預(yù)計會上線的內(nèi)容有jetty盼砍、mysql尘吗、html、rocketmq浇坐、Kafka等幾個內(nèi)容睬捶。

來看一個范例把,代碼如下所示:

package com.mengzhidu.nio.demo;

import java.io.RandomAccessFile;
import java.nio.ByteBuffer;
import java.nio.channels.FileChannel;

/**
 * 這里集中演示了一下FileChannel的用法
 */
public class Demo8 {
    public static void main(String[] args) throws Exception{
        RandomAccessFile file = new RandomAccessFile("src/main/resources/demo08.txt", "rw");
        FileChannel channel = file.getChannel();

        System.out.println("文件的大小為:" + channel.size());
        channel.truncate(64);

        ByteBuffer buffer = ByteBuffer.allocate(1024);
        channel.read(buffer);
        System.out.println("buffer的內(nèi)容:" + new String(buffer.array()));

        channel.close();
    }
}

然后我們執(zhí)行以下吗跋,我們的執(zhí)行效果如下所示:


image.png

不過需要說明的是侧戴,我們的demo08.txt文件也被截斷了,它也只被截取了前64個字節(jié)跌宛,來看一下吧:


image.png
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末酗宋,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子疆拘,更是在濱河造成了極大的恐慌蜕猫,老刑警劉巖,帶你破解...
    沈念sama閱讀 219,270評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件哎迄,死亡現(xiàn)場離奇詭異回右,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)漱挚,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,489評論 3 395
  • 文/潘曉璐 我一進(jìn)店門翔烁,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人旨涝,你說我怎么就攤上這事蹬屹。” “怎么了白华?”我有些...
    開封第一講書人閱讀 165,630評論 0 356
  • 文/不壞的土叔 我叫張陵慨默,是天一觀的道長。 經(jīng)常有香客問我弧腥,道長厦取,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,906評論 1 295
  • 正文 為了忘掉前任管搪,我火速辦了婚禮虾攻,結(jié)果婚禮上铡买,老公的妹妹穿的比我還像新娘。我一直安慰自己台谢,他們只是感情好寻狂,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,928評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著朋沮,像睡著了一般蛇券。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上樊拓,一...
    開封第一講書人閱讀 51,718評論 1 305
  • 那天纠亚,我揣著相機(jī)與錄音,去河邊找鬼筋夏。 笑死蒂胞,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的条篷。 我是一名探鬼主播骗随,決...
    沈念sama閱讀 40,442評論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼赴叹!你這毒婦竟也來了鸿染?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,345評論 0 276
  • 序言:老撾萬榮一對情侶失蹤乞巧,失蹤者是張志新(化名)和其女友劉穎涨椒,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體绽媒,經(jīng)...
    沈念sama閱讀 45,802評論 1 317
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡蚕冬,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,984評論 3 337
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了是辕。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片囤热。...
    茶點(diǎn)故事閱讀 40,117評論 1 351
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖获三,靈堂內(nèi)的尸體忽然破棺而出旁蔼,到底是詐尸還是另有隱情,我是刑警寧澤石窑,帶...
    沈念sama閱讀 35,810評論 5 346
  • 正文 年R本政府宣布牌芋,位于F島的核電站蚓炬,受9級特大地震影響松逊,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜肯夏,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,462評論 3 331
  • 文/蒙蒙 一经宏、第九天 我趴在偏房一處隱蔽的房頂上張望犀暑。 院中可真熱鬧,春花似錦烁兰、人聲如沸耐亏。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,011評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽广辰。三九已至,卻和暖如春主之,著一層夾襖步出監(jiān)牢的瞬間择吊,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,139評論 1 272
  • 我被黑心中介騙來泰國打工槽奕, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留几睛,地道東北人。 一個月前我還...
    沈念sama閱讀 48,377評論 3 373
  • 正文 我出身青樓粤攒,卻偏偏與公主長得像所森,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子夯接,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,060評論 2 355

推薦閱讀更多精彩內(nèi)容