java使用NIO读入大文件

来源:互联网 发布:分布式数据库设计案例 编辑:程序博客网 时间:2024/06/07 01:54
public static ArrayList<String> readBigFileUseNIO(String filePath) throws IOException{//NIO相比普通的IO,多的内容在于指定缓冲区和通道。这种和底层直接交互的流操作方式,相比普通流而言,在效率上有所提升。FileInputStream fis=new FileInputStream(filePath);//java.ioFileChannel fcin=fis.getChannel();//java.nio,用来操作文件ByteBuffer buf=ByteBuffer.allocate(fis.available());//java.nio,1024*1024*500申请500M的缓冲池//int num=0;while(true){buf.clear();//写入buf前的清理工作int flag=fcin.read(buf);if(flag==-1)break;buf.flip();//读出buf前的准备工作//FileOutputStream fos=new FileOutputStream("D:/"+(num++)+".txt");//大文件剪成几个小文件存起来//FileChannel fcout=fos.getChannel();////fcout.write(buf);}////////////////////////////////////////ByteArrayInputStream stream = new ByteArrayInputStream(buf.array());//java.ioBufferedReader br = new BufferedReader(new InputStreamReader(stream)); //java.io ArrayList<String> res=new ArrayList<String>();String line = br.readLine(); while(line != null)    {line=line.trim();        if(line.length()>1){System.out.println("【line】"+line);res.add(line);}line = br.readLine();}//////////////////////////////////////////return res;}

Java NIO(New IO)是一个可以替代标准Java IO API的IO API(从Java 1.4开始),Java NIO提供了与标准IO不同的IO工作方式。

Java NIO: Channels and Buffers(通道和缓冲区

标准的IO基于字节流和字符流进行操作的,而NIO是基于通道(Channel)和缓冲区(Buffer)进行操作,数据总是从通道读取到缓冲区中,或者从缓冲区写入到通道中

Java NIO: Asynchronous IO(异步IO

Java NIO可以让你异步的使用IO,例如:当线程从通道读取数据到缓冲区时,线程还是可以进行其他事情。当数据被写入到缓冲区时,线程可以继续处理它。从缓冲区写入通道也类似。

Java NIO: Selectors(选择器

Java NIO引入了选择器的概念,选择器用于监听多个通道的事件(比如:连接打开,数据到达)。因此,单个的线程可以监听多个数据通道
下面是Java NIO系列文章的目录:

  1. Java NIO概述
  2. Java NIO Channel
  3. Java NIO Buffer
  4. Java NIO Scatter / Gather
  5. Java NIO 通道之间的数据传输
  6. Java NIO Selector
  7. Java NIO FileChannel
  8. Java NIO SocketChannel
  9. Java NIO ServerSocketChannel
  10. Java NIO DataGramChannel
  11. Java NIO Pipe
  12. Java NIO 与IO