栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

合并大文件而不将整个文件加载到内存中?

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

合并大文件而不将整个文件加载到内存中?

如果您想有效地合并两个或多个文件,则应问自己,为什么要使用

char
基础文件
Reader
Writer
执行该任务。

通过使用这些类,您可以将文件的字节转换为字符,从系统的默认编码转换为unipre,然后从unipre转换回系统的默认编码。这意味着程序必须对整个文件执行两次数据转换。

而且,顺便说一句,

BufferedReader
BufferedWriter
绝不是
NIO2
假象。这些类自Java的第一个版本以来就存在。

当您通过实际的NIO函数使用字节方式复制时,文件可以被传输,而不会被Java应用程序所触摸,在最佳情况下,传输将直接在文件系统的缓冲区中进行:

import static java.nio.file.StandardOpenOption.*;import java.io.IOException;import java.nio.channels.FileChannel;import java.nio.file.Path;import java.nio.file.Paths;public class MergeFiles{  public static void main(String[] arg) throws IOException {    if(arg.length<2) {      System.err.println("Syntax: infiles... outfile");      System.exit(1);    }    Path outFile=Paths.get(arg[arg.length-1]);    System.out.println("TO "+outFile);    try(FileChannel out=FileChannel.open(outFile, CREATE, WRITE)) {      for(int ix=0, n=arg.length-1; ix<n; ix++) {        Path inFile=Paths.get(arg[ix]);        System.out.println(inFile+"...");        try(FileChannel in=FileChannel.open(inFile, READ)) {          for(long p=0, l=in.size(); p<l; ) p+=in.transferTo(p, l-p, out);        }      }    }    System.out.println("DONE.");  }}


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/428425.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号