用于在FLEX中显示(> 25 MB)文本文件的组件

时间:2012-02-06 20:24:56

标签: java flex

使用AMF到Java的Flex前端。 试图实时读取正在写入的文件。例如,日志。

我正在使用Java的RandomAccessFile类来读取文件的“新”行,并将它们作为字节数组发送回UI,并将字节偏移量从下次开始读取。

使用mx:List显示文本文件的所有行。

我遇到的问题是Flex或Flash Player,在温和的大文件上耗尽内存,大于25MB。 有没有在Flex中显示大量文本数据的首选方法?或者Flex / Flash只是处理得不好而且我基本上搞砸了?

感谢。

2 个答案:

答案 0 :(得分:1)

如果25MB只是略大,那么我说你可能需要将数据分页到组件中,并且一次只能在内存中存储几页。我可能会在List上选择TextArea之类的东西,但如果你没有听起来像你将要做的所有数据,那么为TextArea创建无缝滚动可能会很困难。所以现在坚持使用List,并找出想要制作页面的行数。并将您的后端实现为:

// service call interface
public Page getPage( int lineStart, int lines );

// response object from the service call
public class Page {
    private var _totalLines:int;
    private var _lineStart:int;
    private var _lineEnd:int;

    [ArrayElementType("String")]
    private lines:ArrayCollection;
}

然后您可以加载页面并在内存中存储X个页面,但使用文件中的totalLines来了解模型的大小,以便滚动条可以正确呈现。您只需要构建一个分页数据提供程序来加载尚未加载的页面,如果页面没有显示则会丢弃页面,或者显示距离显示最远的页面。

答案 1 :(得分:0)

现在我正在研究component,它能够快速显示高达100Mb的文本。您只需将mx:TextArea替换为LongTextArea

即可
<longText:LongTextArea text="{...}"/>

Download LongTextArea SWC.