首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > 编程 >

NIO之轻便读取大文件

2012-10-24 
NIO之轻松读取大文件011-01-07 13:44 来自 adminNIO轻松读取大文件(1G以上)view sourceprint?01import jav

NIO之轻松读取大文件

011-01-07 13:44 来自 adminNIO轻松读取大文件(1G以上)

view sourceprint?01import java.io.FileInputStream;02import java.io.FileOutputStream;03import java.io.IOException;04import java.nio.ByteBuffer;05import java.nio.channels.FileChannel;06/**07?*08?* 用NIO读取大文本(1G以上)09?*10?* @author landon11?*12?*/13public class ReadLargeTextWithNIO14{15?public static void main(String...args) throws IOException16?{17??FileInputStream fin = new FileInputStream("d:\\temp\\outlineA1.log");18??FileChannel fcin = fin.getChannel();19???20??ByteBuffer buffer = ByteBuffer.allocate(1024 * 1024 * 50);21???22??while(true)23??{24???buffer.clear();25????26???int flag = fcin.read(buffer);27????28???if(flag == -1)29???{30????break;31???}32????33???buffer.flip();34????35???FileOutputStream fout = new FileOutputStream("d:\\temp\" + Math.random() + ".log");36???FileChannel fcout = fout.getChannel();37????38???fcout.write(buffer);39??}40?}41}42?43下面简单说几个注意的地方:44a.因为要把超大文本切分成小的部分,所以分配buffer的时候尽量大一些,这里我分配的大小是50M,不过如果太大了,可能会报内存溢出。45b.说一下clear和flip的方法,直接上源码:46public final Buffer clear()47{48position = 0;49limit = capacity;50mark = -1;51return this;52}53?54public final Buffer flip()55{56limit = position;57position = 0;58mark = -1;59return this;60}61一看便知二者的区别。62c.跳出循环也即读完的判断是read返回的flag是-1

热点排行