java - 使大对象可迭代
问题描述
我有 50 个文件,每个文件大小为 100MB。
每个文件在我的代码中都有一个类表示,例如:
public class FileRepresentation
{
private String path;
public FileRepresentation(String path)
{
this.path = path;
}
public String getPath()
{
return this.path;
}
}
由于显而易见的原因,当我循环遍历它时,我的内存中不能有 50 个对象,每个 100MB。
我有一个包含所有文件目录路径的类,我想让这个类可迭代,并且一次能够返回 1 个对象,这意味着来自迭代器(循环)的每个请求,它都会创建一个新的对象并返回它。
public class FilesClass
{
private String folderPath;
public FilesClass(String folderPath)
{
this.folderPath= folderPath;
}
//What I want to achieve:
public FileRepresentation getNextFile()
{
return new FileRepresentation("nextFile");
}
}
我曾想过有一个计数器,每次迭代都只是创建一个新对象,但这似乎是错误的。我怎样才能实现它?有没有更好的方法呢?也许我弄错了,并不是所有 50 个对象都在循环中的内存中?
谢谢。
编辑:我最终提出了我建议的方法。
解决方案
我最终使用了我的 Looper 方法:
public class FileRepresentation
{
private String path;
public FileRepresentation(String path)
{
this.path = path;
}
public String getPath()
{
return this.path;
}
}
public class FilesClass
{
private List<File> files;
private int counter;
public FilesClass(List<File> files)
{
this.files = files;
this.counter = 0;
}
public FileRepresentation getNextFile()
{
FileRepresentation object = myOwnImplementationToConvertFileToObject(this.files.get(counter++));
return object;
}
}
推荐阅读
- java - 使用 Criteria Builder 按嵌入属性排序
- mongoose - 如何在猫鼬跳过和限制之前排序?
- asp.net - 在 Visual Studio 2017 中设置 Angular 4
- node.js - 如何使用 mongoose 查询和 async-await/Promise 从 mongo 文档访问/返回值?
- fastlane - 有没有办法使用 fastlane 将构建异步上传到 testflight?
- sqlplus - sql加内连接with where子句(多条件)
- matlab - 如何在 Simulink 下更正“S-Function 'X' 的默认端口尺寸函数错误。函数未完全设置输出端口 x 的尺寸”?
- php - 带有大文件的 ispconfig php-fpm SSL 错误
- sql-server - 如何将包含双引号的csv中的数据批量插入到sql server 2014
- sharepoint - 引导 4 卡 IE 11