<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    I want to fly higher
    programming Explorer
    posts - 114,comments - 263,trackbacks - 0
        今天同事碰到了一個問題,從游戲服務器下載下來的輸出log有一個多G大。用記事本打不開,EditPlus也打不開,都提示文件太大。用word也打不開,提示文件大于512M。打不開怎么查找錯誤啊。于是他問我解決辦法。我想了想,決定寫一個簡單的程序讀取這個log,把這個log切分成一些小的可以用Editplus打開的文本。正好前段時間看了一些NIO的東西,所以決定用NIO來寫。沒想到,10幾行代碼就搞定了。下面附上源代碼:
         ReadLargeTextWithNIO.java
     1package com.nio.entrace;
     2
     3import java.io.FileInputStream;
     4import java.io.FileOutputStream;
     5import java.io.IOException;
     6import java.nio.ByteBuffer;
     7import java.nio.channels.FileChannel;
     8
     9/**
    10 * 
    11 * 用NIO讀取大文本(1G以上)
    12 * 
    13 * @author landon
    14 *
    15 */

    16public class ReadLargeTextWithNIO 
    17{
    18 public static void main(Stringargs) throws IOException
    19 {
    20  FileInputStream fin = new FileInputStream("d:\\temp\\outlineA1.log");
    21  FileChannel fcin = fin.getChannel();
    22  
    23  ByteBuffer buffer = ByteBuffer.allocate(1024 * 1024 * 50);
    24  
    25  while(true)
    26  {
    27   buffer.clear();
    28   
    29   int flag = fcin.read(buffer);
    30   
    31   if(flag == -1)
    32   {
    33    break;
    34   }

    35   
    36   buffer.flip();
    37   
    38   FileOutputStream fout = new FileOutputStream("d:\\temp\\" + Math.random() + ".log");
    39   FileChannel fcout = fout.getChannel();
    40   
    41   fcout.write(buffer);
    42  }

    43 }

    44}

    45
    46


        下面簡單說幾個注意的地方:
         a.因為要把超大文本切分成小的部分,所以分配buffer的時候盡量大一些,這里我分配的大小是50M,不過如果太大了,可能會報內存溢出。
         b.說一下clear和flip的方法,直接上源碼:

     1public final Buffer clear()
     2    {
     3        position = 0;
     4        limit = capacity;
     5        mark = -1;
     6        return this;
     7    }

     8
     9 public final Buffer flip()
    10    {
    11        limit = position;
    12        position = 0;
    13        mark = -1;
    14        return this;
    15    }


        一看便知二者的區別。

        c.跳出循環也即讀完的判斷是read返回的flag是-1

        利用NIO確實方便,以后繼續研究->NIO網絡編程
    posted on 2010-12-20 22:09 landon 閱讀(5178) 評論(4)  編輯  收藏 所屬分類: Program

    FeedBack:
    # re: NIO入門之輕松讀取大文件
    2010-12-21 14:37 | @joe
    不用nio也可以。nio和bio的區別不再這。而在主動和被動模式。  回復  更多評論
      
    # re: NIO入門之輕松讀取大文件
    2010-12-21 21:08 | landonlv
    嗯,大牛,學習了。@joe
      回復  更多評論
      
    # re: NIO入門之輕松讀取大文件
    2011-07-28 09:31 | greatghoul
    為什么不把代碼放在代碼塊中,方便閱讀,你這樣格式都破壞掉了。  回復  更多評論
      
    # re: NIO入門之輕松讀取大文件
    2011-07-29 23:05 | landonlv
    嗯,直接粘貼的。在ide中是格式的,貼過來就不行了@greatghoul
      回復  更多評論
      
    主站蜘蛛池模板: 久久久综合亚洲色一区二区三区| 亚洲自国产拍揄拍| 91精品啪在线观看国产线免费| 亚洲另类视频在线观看| 哒哒哒免费视频观看在线www| 最新国产乱人伦偷精品免费网站| 亚洲国产成人精品无码一区二区| 无码国产亚洲日韩国精品视频一区二区三区| 福利免费在线观看| 亚洲免费黄色网址| 亚洲国产精品尤物YW在线观看| 午夜不卡久久精品无码免费| 色噜噜噜噜亚洲第一| 亚洲天堂中文资源| 免费又黄又硬又爽大片| 91短视频免费在线观看| eeuss免费天堂影院| avtt天堂网手机版亚洲| 亚洲成AV人片在线观看ww| 国产美女a做受大片免费| 99免费观看视频| 国产vA免费精品高清在线观看| 亚洲人成综合网站7777香蕉| 亚洲大成色www永久网站| 日韩免费高清一级毛片在线| 99久久免费观看| h视频在线观看免费| 亚洲国产午夜精品理论片在线播放| 亚洲免费视频网站| 亚洲片一区二区三区| 青青草国产免费久久久下载| 98精品全国免费观看视频| 国产免费久久久久久无码| 色噜噜噜噜亚洲第一| 国产精品亚洲精品| 久久精品国产精品亚洲毛片| 中国亚洲女人69内射少妇| 亚洲日本一区二区一本一道 | 91av免费观看| 99re6在线视频精品免费| 黄页免费视频播放在线播放|