这个问题可能很长,但我想提供很多信息。
概述:我正在为 Blackberry 创建一个 Stock Quotes Ticker 应用程序。但我的 StringBuffer 包含单个股票信息时遇到问题。
流程:我的应用程序通过 SocketConnection 连接到我们的服务器。服务器发出一组格式化的字符串,其中包含最新的股票交易。因此,每当发生新交易时,服务器都会发送该交易的单个股票报价。通过 InputStream,我能够读取该信息并将每个字符放在线程引用的 StringBuffer 中。通过基于char3解析,我能够确定一组股票报价/信息。
char1 - 分隔数据 char3 - 表示股票报价/信息的结束
我们的服务器发出的股票报价格式示例: stock_quote_name(char 1)some_data(char1)some_data(char1)(char3)
然后,我的应用程序会解析该股票报价以比较某些数据,并将其格式化为在屏幕上显示时的样子。当交易逐渐(缓慢)发生时,该应用程序可以完美运行。然而..
问题:当交易发生得太快且几乎同时发生时,我的应用程序无法有效处理发送的信息。StringBuffer 的内容与下一笔交易相结合。含义 一个 StringBuffer 中的两个股票信息。
字段应该是: Stock_quote_name some_data some_data
正在发生的事情的示例: Stock_quote_name some_data some_dataStock_quote_name some_data some_data
这是我这部分的代码:
while (-1 != (data = is.read()))
{
sb.append((char)data);
while(3 != (data = is.read()))
{
sb.append((char)data);
}
UiApplication.getUiApplication().invokeLater(new Runnable()
{
public void run()
{
try
{
synchronized(UiApplication.getEventLock())
{
SetStringBuffer(sb);
DisplayStringBuffer();
RefreshStringBuffer();
}
} catch (Exception e)
{
System.out.println("Error in setting stringbuffer: " + e.toString());
}
}
});
}
public synchronized void DisplayStringBuffer()
{
try
{
//parse sb - string buffer
......
}
catch(Exception ex)
{
System.out.println("error in DisplayStringBuffer(): " + ex.toString());
}
}
public synchronized void SetStringBuffer(StringBuffer dataBuffer)
{
this.sb =dataBuffer;
System.out.println(sb);
}
public synchronized void RefreshStringBuffer()
{
this.sb.delete(0, this.sb.length());
}
据我所见,当交易发生得非常快时,当我尝试放入新数据时,StringBuffer 不会立即刷新,并且仍然具有上一笔交易的内容。
我的问题是: 你们对我如何将数据放入 StringBuffer 有任何建议,而无需将下一个信息附加到第一个内容