public static ArrayList<String> readBigFileUseNIO(String filePath) throws IOException
{//NIO相比普通的IO,多的内容在于指定缓冲区和通道。这种和底层直接交互的流操作方式,相比普通流而言,在效率上有所提升。
FileInputStream fis=new FileInputStream(filePath);//java.io
FileChannel 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.io
BufferedReader 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系列文章的目录:
- Java NIO概述
- Java NIO Channel
- Java NIO Buffer
- Java NIO Scatter / Gather
- Java NIO 通道之间的数据传输
- Java NIO Selector
- Java NIO FileChannel
- Java NIO SocketChannel
- Java NIO ServerSocketChannel
- Java NIO DataGramChannel
- Java NIO Pipe
- Java NIO 与IO