【发布时间】:2010-03-01 04:19:22
【问题描述】:
这个问题可能很长,但我想提供很多信息。
概述:我正在为 Blackberry 创建一个 Stock Quotes Ticker 应用程序。但我的 StringBuffer 包含单个 Stock 信息时出现问题。
进程:我的应用通过 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 有什么建议,而不会将下一个信息附加到第一个内容中
【问题讨论】:
标签: blackberry multithreading java-me inputstream stringbuffer