【優(yōu)雅編程之道】之IO流嗅钻,序列化的4點建議

開心一笑

【媽媽:“寶寶,你已經(jīng)四歲了击你,你可以自己睡了司训。”
孩子:“爸爸都那么大了独郎,為什么不自己睡踩麦?”】

視頻教程

大家好,我錄制的視頻《Java之優(yōu)雅編程之道》已經(jīng)在CSDN學(xué)院發(fā)布了氓癌,有興趣的同學(xué)可以購買觀看谓谦,相信大家一定會收獲到很多知識的。謝謝大家的支持……

視頻地址:http://edu.csdn.net/lecturer/994


唯美圖片

提出問題

項目中IO流贪婉,序列化需要注意的幾點反粥???


解決問題

前言

在工作中才顿,寫IO流的代碼比較少莫湘,一般是在文件上傳,下載郑气,excel文件導(dǎo)入導(dǎo)出等等才會使用到幅垮。但是一旦系統(tǒng)在IO流出現(xiàn)問題,后果是不堪設(shè)想的尾组,可能會造成整個系統(tǒng)直接掛掉忙芒。因此,寫好IO流讳侨,序列號和反序列話就顯的尤為重要呵萨。

1.序列化類新增屬性時,請不要修改serialVersionUID字段避免反序列失敗

2.及時關(guān)閉流跨跨,先開后關(guān)潮峦,后開先關(guān)

我們在io操作完成后,需要及時關(guān)閉流釋放資源勇婴,因為這樣的對象不主動關(guān)閉忱嘹,將會占用系統(tǒng)資源,會增大系統(tǒng)的開銷咆耿。

@Override
public void downloadAttachment(SysAttachment sysAttachment, HttpServletRequest request, HttpServletResponse response) throws Exception {
    //sysAttachmentService.download(attachmentId,request,response);
    String fileName = sysAttachment.getName() + "." + sysAttachment.getType();
    String dfileName = new String(fileName.getBytes("gb2312"), "iso8859-1");
    String fullPath = sysAttachment.getPath();
    //先開后關(guān)
    OutputStream out = response.getOutputStream();
    File file = new File(fullPath);
    if (file.exists()) {
        if(sysAttachment.getSubModule().equals("android")){
            response.setContentType("application/vnd.androi3d.package-archive");
        }
        else {
            response.setContentType("APPLICATION/OCTET-STREAM");
        }
        response.addHeader("Content-Disposition", "attachment;filename=" + dfileName);
        //后開先關(guān)
        FileInputStream in = null;
        try {
            out = response.getOutputStream();
            in = new FileInputStream(fullPath);
            byte[] b = new byte[1024];
            int i = 0;
            while ((i = in.read(b)) > 0) {
                out.write(b, 0, i);
            }
            out.flush();
        } finally {
            if (in != null) {
                in.close();
                in = null;
            }
            if (out != null) {
                try {
                    out.close();
                } catch (IOException e) {
                    logger.error(e.getMessage(), e);
                }
                out = null;
                response.flushBuffer();
            }
        }
    } else {
        throw new ResourceNotFoundException("文件: \"" + fileName + "\"不存在!");
    }

**3.文件中的分隔符使用類中常量 **

在window和linux中的分隔符等可能會不同德谅,使用類中的分割常量將會根據(jù)系統(tǒng)自動生成。如File.pathSeparator萨螺、File.separator等

4.盡量使用緩存流

在軟件系統(tǒng)中窄做,IO速度比內(nèi)存速度慢,IO讀寫在很多情況下會是系統(tǒng)的瓶頸慰技。
在java標準IO操作中椭盏,InputStream和OutputStream提供基于流的IO操作,以字節(jié)為處理單位吻商;Reader和Writer實現(xiàn)了Buffered緩存掏颊,以字符為處理單位。
從Java1.4開始艾帐,增加NIO(New IO)乌叶,增加緩存Buffer和通道Channel,以塊為處理單位柒爸,是雙向通道(可讀可寫准浴,類似RandomAccessFile),支持鎖和內(nèi)存映射文件訪問接口捎稚,大大提升了IO速度乐横。

java緩沖流本身不具IO功能求橄,只是在別的流上加上緩沖提高效率,像是為別的流裝上一種包裝葡公。當(dāng)對文件或其他目標頻繁讀寫或操作效率低罐农,效能差。這時使用緩沖流能夠更高效的讀寫信息催什。因為緩沖流先將數(shù)據(jù)緩存起來涵亏,然后一起寫入或讀取出來。所以說蛆楞,緩沖流還是很重要的溯乒,在IO操作時記得加上緩沖流提升性能夹厌。

緩沖流分為字節(jié)和字符緩沖流

  • 字節(jié)緩沖流為:

BufferedInputStream—字節(jié)輸入緩沖流
BufferedOutputStream—字節(jié)輸出緩沖流

  • 字符緩沖流為:

BufferedReader—字符輸入緩沖流
BufferedWriter—字符輸出緩沖流

下面主要介紹這四種緩沖流的使用豹爹。

一. 字節(jié)緩沖流

1.BufferedOutputStream—字節(jié)輸出緩沖流

BufferedOutputStream類實現(xiàn)緩沖的輸出了,通過設(shè)置這種輸出流矛纹,應(yīng)用程序就可以將各個字節(jié)寫入底層輸出流中臂聋,而不必每一個字節(jié)寫入都調(diào)用底層系統(tǒng)。

示例代碼:

public static void main(String[] args) { 
    try { 
         //創(chuàng)建字節(jié)輸出流實例 
         OutputStream out=new FileOutputStream("L:\\test.txt"); 
         //根據(jù)字節(jié)輸出流構(gòu)建字節(jié)緩沖流 
         BufferedOutputStream buf=new BufferedOutputStream(out); 
         String data="好好學(xué)習(xí),天天向上"; 
         buf.write(data.getBytes());//寫入緩沖區(qū) 
         buf.flush();//刷新緩沖區(qū)或南,即把內(nèi)容寫入 
         //關(guān)閉流 
         buf.close();//關(guān)閉緩沖流時,也會刷新一次緩沖區(qū) 
         out.close(); 
    } catch (IOException e) { 
        e.printStackTrace(); 
    } 
}

結(jié)束語

IO流 和 序列化反序列化的課程孩等,我們今天就講到這里。跟多深入的知識采够,大家可以查閱書籍等資料去學(xué)習(xí)肄方。


讀書感悟

來自七堇年《被窩是青春的墳?zāi)埂?/p>

  • 被窩是青春的墳?zāi)埂?/li>
  • 我生命中的溫暖就那么多,全部給了你蹬癌,叫我以后怎么再對別人微笑权她。
  • 我們要有最樸素的生活,與最遙遠的夢想 逝薪。即使明日天寒地凍隅要,路遠馬亡。
  • 生命若給我無數(shù)張臉董济,我永遠選擇最疼痛的一張去觸摸步清。
  • 我知道有些人是無法忘記的,即使在你成長之初他們就已經(jīng)消失虏肾。但是他們被鐫刻在你的生命線上廓啊,無法磨滅。讓我們終其一生為了這些印記做兩件事情:懷念封豪,或者尋找谴轮。
  • 無奈的是,語言這東西撑毛,在表達愛意的時候如此無力书聚;在表達傷害的時候唧领,卻又如此鋒利。
  • 寂寞雌续,就是你有話說的時候沒人聽斩个,有人聽的時候你卻無話可說。

經(jīng)典故事

【有一個歐巴桑在首飾店里看到二只一模一樣的手環(huán)驯杜。
  一個標價五百五十元受啥,另一個卻只標價二百五十元。
  她大為心喜鸽心,立刻買下二百五十元的手環(huán)滚局,得意洋洋的走出店門。
  臨出去前顽频,聽到里面的店員悄悄對另一個店員說:「看吧藤肢,這一招屢試不爽。
  (學(xué)習(xí)啦:試探如餌糯景,可以輕而易舉的使許多人顯露出貪婪的本性嘁圈,然而那常常是吃虧受騙的開始。)】


大神文章


其他

如果有帶給你一絲絲小快樂蟀淮,就讓快樂繼續(xù)傳遞下去最住,歡迎點贊、頂怠惶、歡迎留下寶貴的意見涨缚、多謝支持!

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末策治,一起剝皮案震驚了整個濱河市脓魏,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌览妖,老刑警劉巖轧拄,帶你破解...
    沈念sama閱讀 218,682評論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異讽膏,居然都是意外死亡檩电,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,277評論 3 395
  • 文/潘曉璐 我一進店門府树,熙熙樓的掌柜王于貴愁眉苦臉地迎上來俐末,“玉大人,你說我怎么就攤上這事奄侠∽矿铮” “怎么了?”我有些...
    開封第一講書人閱讀 165,083評論 0 355
  • 文/不壞的土叔 我叫張陵垄潮,是天一觀的道長烹卒。 經(jīng)常有香客問我闷盔,道長,這世上最難降的妖魔是什么旅急? 我笑而不...
    開封第一講書人閱讀 58,763評論 1 295
  • 正文 為了忘掉前任逢勾,我火速辦了婚禮,結(jié)果婚禮上藐吮,老公的妹妹穿的比我還像新娘溺拱。我一直安慰自己,他們只是感情好谣辞,可當(dāng)我...
    茶點故事閱讀 67,785評論 6 392
  • 文/花漫 我一把揭開白布迫摔。 她就那樣靜靜地躺著,像睡著了一般泥从。 火紅的嫁衣襯著肌膚如雪句占。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,624評論 1 305
  • 那天歉闰,我揣著相機與錄音辖众,去河邊找鬼卓起。 笑死和敬,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的戏阅。 我是一名探鬼主播昼弟,決...
    沈念sama閱讀 40,358評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼奕筐!你這毒婦竟也來了舱痘?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,261評論 0 276
  • 序言:老撾萬榮一對情侶失蹤离赫,失蹤者是張志新(化名)和其女友劉穎芭逝,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體渊胸,經(jīng)...
    沈念sama閱讀 45,722評論 1 315
  • 正文 獨居荒郊野嶺守林人離奇死亡旬盯,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,900評論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了翎猛。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片胖翰。...
    茶點故事閱讀 40,030評論 1 350
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖切厘,靈堂內(nèi)的尸體忽然破棺而出萨咳,到底是詐尸還是另有隱情,我是刑警寧澤疫稿,帶...
    沈念sama閱讀 35,737評論 5 346
  • 正文 年R本政府宣布培他,位于F島的核電站鹃两,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏舀凛。R本人自食惡果不足惜怔毛,卻給世界環(huán)境...
    茶點故事閱讀 41,360評論 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望腾降。 院中可真熱鬧拣度,春花似錦、人聲如沸螃壤。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,941評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽奸晴。三九已至冤馏,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間寄啼,已是汗流浹背逮光。 一陣腳步聲響...
    開封第一講書人閱讀 33,057評論 1 270
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留墩划,地道東北人涕刚。 一個月前我還...
    沈念sama閱讀 48,237評論 3 371
  • 正文 我出身青樓,卻偏偏與公主長得像乙帮,于是被迫代替她去往敵國和親杜漠。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,976評論 2 355

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