使用AMF到Java的Flex前端。 试图实时读取正在写入的文件。例如,日志。
我正在使用Java的RandomAccessFile类来读取文件的“新”行,并将它们作为字节数组发送回UI,并将字节偏移量从下次开始读取。
使用mx:List显示文本文件的所有行。
我遇到的问题是Flex或Flash Player,在温和的大文件上耗尽内存,大于25MB。 有没有在Flex中显示大量文本数据的首选方法?或者Flex / Flash只是处理得不好而且我基本上搞砸了?
感谢。
答案 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="{...}"/>