Этот вопрос может быть длинным, но я хочу предоставить много информации.
Обзор : я создаю приложение Stock Quotes Ticker для Blackberry. Но у меня проблемы с моим StringBuffer, который содержит индивидуальную информацию об акциях.
Процесс : мое приложение подключается к нашему серверу через SocketConnection. Сервер отправляет отформатированный набор строк, который содержит последнюю биржевую сделку. Таким образом, всякий раз, когда происходит новая сделка, сервер отправляет отдельную котировку акций этой сделки. Через InputStream я могу прочитать эту информацию и поместить каждый символ в StringBuffer, на который ссылается Threads. С помощью анализа на основе 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 без добавления следующей информации к первому контенту