srk*_*srk 6 java apache-poi aspose
我正在阅读一些用分隔符分隔的文本文件.
我的文本文件内容示例
Avc def efg jksjd
1 2 3 5
3 4 6 0
逐行使用散列映射将其保存在内存中,散列映射将行号作为整数类型的键,每行文本文件作为List对象
考虑一下,我的地图会存储这样的信息
整数列表
1 [Avc def efg jksjd]
我正在使用Apache POI写入excel.使用Apache POI写入excel时,我遵循这种方法,这是我的代码片段
HSSFWorkbook workbook = new HSSFWorkbook();
HSSFSheet sheet = workbook.createSheet("Sample sheet");
Map<Integer, List<Object>> excelDataHolder = new LinkedHashMap<Integer, List<Object>>();
int rownum = 0;
for (Integer key : keyset) {
Row row = sheet.createRow(rownum++);
List<Object> objList = excelHolder.get(key);//excelHolder is my map
int cellnum = 0;
for (Object obj : objList) {
Cell cell = row.createCell(cellnum++);
cell.setCellValue((Date) obj);
}
}
Run Code Online (Sandbox Code Playgroud)
如果要写入excel的行/记录的数量较少,则这很有效.想象一下,如果记录是十亿个数字,或者文本文件中有更多的行假设为100 000.我认为,我的方法失败了,因为createRow和createCell在堆中创建了超过10万个对象.无论java是excel api,我认为写入它(excel)是基于相同的方法,即如上所示的集合迭代.我也用aspose做了一些例子,因此aspose也有同样的问题.
为什么不分块进行读取和写入呢?这是我可以考虑的方法:
如果你不断迭代这个过程。尽管我没有看到 cpu 消耗有什么重大差异,但您肯定会节省内存消耗。
希望能帮助到你!
| 归档时间: |
|
| 查看次数: |
7137 次 |
| 最近记录: |