草庐IT

java - Java读取大文件——Java堆空间

我正在读取一个大的tsv文件(~40G)并尝试通过逐行读取来修剪它并仅将某些行打印到新文件中。但是,我不断收到以下异常:java.lang.OutOfMemoryError:Javaheapspaceatjava.util.Arrays.copyOf(Arrays.java:2894)atjava.lang.AbstractStringBuilder.expandCapacity(AbstractStringBuilder.java:117)atjava.lang.AbstractStringBuilder.append(AbstractStringBuilder.java:532)a

java - Google Drive 索引大文件的限制是什么?

我正在使用googledriveapi来存储和检索pdf文件。我想使用搜索参数查询这些文件。但在我开始实现之前。我想知道谷歌如何处理大型pdf文件的索引。(600+页25Mb+)我想知道基于文本的pdf。(他们不需要ocr)我在驱动器网站上尝试了一些搜索,但并不总是有效。我想知道是否有任何限制以及它们是什么。 最佳答案 根据thispage对于带OCR的PDF:图像(.jpg、.gif、.png)和PDF文件(.pdf)的最大大小为2MB。对于PDF文件,我们在搜索要提取的文本时只查看前10页。和thispage对于带有文本的PDF

java - 在内存有限的系统上写入大文件时,如何避免 mapFailed() 错误

我刚刚在我的opensrc库代码中遇到了一个错误,该错误分配了一个大缓冲区来修改一个大的flac文件,该错误只发生在使用Java1.8.0_7425.74-b0232bit的具有3Gb内存的旧PC机器上原来我只是分配一个缓冲区ByteBufferaudioData=ByteBuffer.allocateDirect((int)(fc.size()-fc.position()));但有一段时间我把它作为MappedByteBuffermappedFile=fc.map(MapMode.READ_WRITE,0,totalTargetSize);我的(错误)理解是映射缓冲区使用的内存比直接

java - 在java中读/写一个大文件

我有一个二进制文件,格式如下:[Nbytesidentifier&recordlength][n1bytesdata][Nbytesidentifier&recordlength][n2bytesdata][Nbytesidentifier&recordlength][n3bytesdata]如你所见,我有不同长度的记录。在每条记录中,我固定了N个字节,其中包含ID和记录中数据的长度。这个文件很大,可以包含300万条记录。我想用应用程序打开这个文件,让用户浏览和编辑记录。(插入/更新/删除记录)我最初的计划是从原始文件创建文件和索引文件,并为每条记录保留下一条和上一条记录地址,以便轻松

java - FileChannel.transferTo 用于 Windows 中的大文件

使用JavaNIO使用可以更快地复制文件。我主要通过互联网找到了两种方法来完成这项工作。publicstaticvoidcopyFile(FilesourceFile,FiledestinationFile)throwsIOException{if(!destinationFile.exists()){destinationFile.createNewFile();}FileChannelsource=null;FileChanneldestination=null;try{source=newFileInputStream(sourceFile).getChannel();desti

java - 在 Java 中连接两个大文件(超过 1.5GB)的最有效(最快)的方法是什么?

我使用了此处的技术并在70秒内连接了两个1.5GB的文件。http://nadeausoftware.com/articles/2008/02/java_tip_how_read_files_quickly我的代码涉及使用具有内存映射的FileChannels和具有8KB缓冲区大小的ByteBuffers。我怎样才能提高这个速度?Filefile=newFile(binDirectory+"/donjon.avi");FileoFile=newFile(binDirectory+"/donjon2.avi");FileInputStreamis=newFileInputStream(f

java - 如何在 Java 8 中逐行读取文件?

在Java8中,我看到在Files类中添加了名为lines()的新方法,可用于在Java中逐行读取文件。它适用于大文件吗?我的意思是我们可以先加载1000行,然后再加载第二组1000行吗?我有1GB的大文件,它可以工作吗?有人可以分享代码片段如何使用吗? 最佳答案 Doesitworkforhugefiles?[...]Ihavehugefilewith1GB,Willitwork?据我所知,它也适用于大文件(但我还没有尝试过):try(Streamlines=Files.lines(path)){lines.filter(...)

java - Java中的内存映射大文件

是否可以在Java中对大文件(多个GB)进行内存映射?FileChannel的这个方法看起来很有前途:MappedByteBuffermap(FileChannel.MapModemode,longposition,longsize)position和size都允许64位值——到目前为止,一切顺利。MappedByteBuffer,然而,只提供了32位位置的方法(get(intindex),position(intnewPosition)等.),这似乎暗示我无法映射大于2GB的文件。我怎样才能绕过这个限制? 最佳答案 看看Using

java - 在java中处理大文件

我有一个大约10GB的大文件。我必须在Java中对文件进行排序、过滤等操作。每个操作都可以并行完成。开启10个线程并行读取文件好不好?每个线程读取1GB的文件。是否有任何其他选项可以解决超大文件的问题并尽快处理它们?NIO适合这种场景吗?目前,我正在连续执行操作,处理此类文件大约需要20分钟。谢谢, 最佳答案 Isitgoodtostart10threadsandreadthefileinparallel?几乎可以肯定不是——尽管这取决于情况。如果它来自SSD(实际上没有寻道时间),那么可能。如果是传统磁盘,肯定不行。但这并不意味着

java - 使用 Java 压缩 ZIP 中的大文件

我需要通过Java类ZipOutputStream压缩一个大文件(~450MB)。这个大尺寸导致我的JVM堆空间出现“OutOfMemory”错误的问题。发生这种情况是因为“zos.write(...)”方法在压缩之前将所有要压缩的文件内容存储在内部字节数组中。origin=newBufferedInputStream(fi,BUFFER);ZipEntryentry=newZipEntry(filePath);zos.putNextEntry(entry);intcount;while((count=origin.read(data,0,BUFFER))!=-1){zos.write