<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 閱讀(5179) 評論(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免费国产自产地址入| 亚洲免费在线观看视频| 日本精品人妻无码免费大全| 亚洲中文字幕无码久久| 精品国产免费观看| 国产偷国产偷亚洲高清在线| 无码欧精品亚洲日韩一区夜夜嗨| 亚洲高清中文字幕| 中文毛片无遮挡高潮免费| 亚洲乱码中文论理电影| 日韩精品免费电影| 夜夜爽妓女8888视频免费观看| 国产亚洲AV夜间福利香蕉149| a级片免费在线观看| 久久亚洲精品成人无码网站 | 国产网站在线免费观看| 欧洲精品码一区二区三区免费看| 久久久久久亚洲精品不卡| 97无码人妻福利免费公开在线视频| 亚洲精品视频免费在线观看| 狠狠久久永久免费观看| 一区二区视频免费观看| 亚洲免费视频网站| 在线免费观看一级片| 91av免费在线视频| 亚洲精品乱码久久久久久下载 | 国产美女无遮挡免费视频| 999zyz**站免费毛片| 亚洲欧洲日本精品| 四虎影视精品永久免费| 国精产品一区一区三区免费视频| 亚洲国产亚洲片在线观看播放 | 国产免费爽爽视频免费可以看| 最新久久免费视频| 在线a亚洲老鸭窝天堂av高清|