我需要将批量数据放入文件中。当我尝试将数据写入到镜头中的文件时,有时我在我的java代码中得到OutOfMemoryException
。为了处理这种情况,我试图编写不同的代码,我需要打开文件一次和write the data to file in chunk
,以便我的堆内存不会增长。因此,我是looking for the best approach
。我的源数据将是rest service's response data
。我会将该数据写入目标文件。
请建议我将数据写入文件的最佳方法......
我试图通过遵循逻辑来处理这种情况......
buffOut.write(arr, 0, available);
buffOut.flush();
答案 0 :(得分:0)
Java Streams 看起来非常合适。与文件扫描程序,缓冲读取器或使用内存映射文件的Java NIO相比,处理文件基于Java流产生更好的结果。
以下是各种Java替代品的处理能力的性能比较:
文件大小: - 1 GB
Sanner方法:总耗时: 15627 ms
Maped Byte Buffer:线程“main”中的异常java.lang.OutOfMemoryError:Java堆空间
Java 8 Stream:总耗用时间: 3124 ms
Java 7文件:总耗用时间: 13657 ms
样品处理实例如下:
section.content .features .overlay svg{
path,polygon{
&#hood {
stroke-dasharray:1000;
stroke-dashoffset:1000;
animation:draw 5s linear forwards
}
}
}
@keyframes draw{
to{stroke-dashoffset:0}
}
答案 1 :(得分:0)
尝试以下方法:
URL url = new URL("http://large.file.dat");
Path path = Paths.get("/home/it/documents/large.file.dat");
Files.copy(url.openStream(), path);
Chunked应该无关紧要,除非您希望在一段时间后连接可能失败时使用文件的某些部分。
您可以使用压缩发送标头并将InputStream包装在GzippedInputStream中。或者使用apache的 HttpClient 并提供开箱即用的支持。