3 Java I/O:NIO中的Buffer( 二 )

Java一般用BufferedInputStream、BufferedReader等带缓冲的I/O类来处理大文件,但如果文件超大的话,比如达到GB,甚至TB级别 , 更快的方式是采用NIO中引入的文件内存映射方案:MappedByteBuffer 。
你只需要MappedByteBuffer读写性能极高,最主要的原因就是因为它实现了对异步操作的支持 , 就可以了!
可以用大文件来试一下:
// ByteBuffer读取大文件public static void useFileChannel() {try{FileInputStream fis = new FileInputStream("你电脑上已经存在的文件路径,例如C:\\file1");FileChannel channel = fis.getChannel();long start = System.currentTimeMillis();ByteBuffer buff = ByteBuffer.allocate((int) channel.size());buff.clear();channel.read(buff);long end = System.currentTimeMillis();System.out.println(end - start);fis.close();channel.close();} catch (IOException e) {e.printStackTrace();}}// MappedByteBuffer读取大文件public static void useMappedByteBuffer() {try{FileInputStream fis = new FileInputStream("你电脑上已经存在的文件路径,例如C:\\file1");FileChannel channel = fis.getChannel();long start = System.currentTimeMillis();MappedByteBuffer mbb = channel.map(FileChannel.MapMode.READ_ONLY, 0, channel.size());long end = System.currentTimeMillis();System.out.println(end - start);fis.close();channel.close();} catch (IOException e) {e.printStackTrace();}}public static void main(String[] args) {useFileChannel();useMappedByteBuffer();}最后把这两个方法放到main()里面试试看效果 。
NIO中的Buffer说这么多已经足够了,用代码去感受会更直接 。
感谢您的大驾光临!咨询技术、产品、运营和管理相关问题,请关注后留言 。欢迎骚扰,不胜荣幸~

推荐阅读