Java 对检索速度较慢的大数据使用NatTable

Java 对检索速度较慢的大数据使用NatTable,java,swt,large-files,nattable,large-data,Java,Swt,Large Files,Nattable,Large Data,我有一个关于NatTable SWT datagrid小部件的问题,我想用它来显示一个巨大的日志文件 由于日志文件的大小可能有几GB,因此我无法将其完全加载到内存中。应用程序应该使用尽可能少的堆空间。因此,myIDataProvider实现了它的getDataValue方法来动态读取日志文件行,借助于一个小的缓存机制和文件中原始行位置的缓存。打开文件时,几乎不知道其内容,甚至不知道表最终必须显示的行数 这导致了几个问题,这些问题目前让我感到震惊: 1) 我必须估计总行数(使用平均行长),直到文件

我有一个关于NatTable SWT datagrid小部件的问题,我想用它来显示一个巨大的日志文件

由于日志文件的大小可能有几GB,因此我无法将其完全加载到内存中。应用程序应该使用尽可能少的堆空间。因此,my
IDataProvider
实现了它的
getDataValue
方法来动态读取日志文件行,借助于一个小的缓存机制和文件中原始行位置的缓存。打开文件时,几乎不知道其内容,甚至不知道表最终必须显示的行数

这导致了几个问题,这些问题目前让我感到震惊:

1) 我必须估计总行数(使用平均行长),直到文件被完全扫描并且确实知道最大行数。一旦出现这种情况,我的
getRowCount
方法就会返回实际的、正确的行数。这似乎吓坏了NatTable小部件,它完全失去了当前位置并跳转到第1行

2) 当做一些直观的事情,如双击列的边框(自动调整列的大小,就像在Excel中一样),我的应用程序会完全冻结,因为突然所有行单元格内容都被使用我的提供程序查询,整个概念被滥用!我不想让任何东西触发完整的文件读取

有人给我一些提示吗?文档太少太差了。。。 任何提示都将不胜感激!如何防止我的应用程序冻结

谢谢

1)当您更改行数时,听起来选择没有保留-行数的更改意味着备份数据的更改,因此可能是出于安全考虑,将选择设置为第一行。您可以在更改行数之前查询所选行,然后在更改行数之后重置所选内容

2) 为了计算出列的最大宽度是多少,表必须查询每行中该单元格的每个值。。。您必须实现分页机制,以便在行不可见时返回导致零宽度的内容,或者您可能希望仅基于可见列请求自动调整大小模式的功能

1)当您更改行数时,听起来选择没有保留-行数的更改意味着备份数据的更改,因此可能是出于安全考虑,将选择设置为第一行。您可以在更改行数之前查询所选行,然后在更改行数之后重置所选内容

2) 为了计算出列的最大宽度是多少,表必须查询每行中该单元格的每个值。。。您必须实现分页机制,以便在行不可见时返回导致零宽度的内容,或者您可能希望仅基于可见列请求自动调整大小模式的功能