我试图在屏幕上显示使用JavaFX textarea
的文本文件内容。我用小文件成功地做到了这一点,但对于大文件,一切都变得太慢了。在1秒内读取了大小为64KB
的文件,并且需要2分钟才能显示它。有代码:JavaFX textarea显示大文件
try (FileReader fileReader = new FileReader(file); BufferedReader reader = new BufferedReader(fileReader)) {
char[] buf = new char[102400];
int haveRead;
while ((haveRead = reader.read(buf)) != -1) {
buf = Arrays.copyOf(buf, haveRead);
String str = new String(buf);
textArea.appendText(str);
log.trace(str);
}
} catch (IOException e) {
log.error("Error while reading file", e);
}
记录显示,即使与多线程几乎所有时间程序等待
textArea.appendText(STR);
怎么办?代码中有更快的实现或者我的错误吗?或者唯一的办法是做显示文本的缓冲区,以某种方式覆盖textarea滑块的行为?
尽量在第一次加载文本字符串,并在同一时间显示它...更新UI需要大量的时间...所以不是'textArea.appendText(STR)'加载文本到一个字符串,然后说:'textArea.setText(YourString)' – Developer66
我会尝试,但如果文件将真的很大,约2GB?并且不仅可以有一个这样的文件。 – Lless
嗯,字符串被保存在内存中,所以你的'Ram'现在包含2GB以上,但在你的方法中这是相同的...也许你必须使用java选项访问Progamm的更多内存:https:// stackoverflow .com/a/2294280/8087490 – Developer66