この質問は長くなるかもしれませんが、多くの情報を提供したいと思います。
概要: Blackberry 用の株価情報アプリを作成しています。しかし、個々の Stock 情報を含む StringBuffer に問題があります。
プロセス: アプリは SocketConnection 経由でサーバーに接続します。サーバーは、最新の株式取引を含むフォーマットされた一連の文字列を送信します。したがって、新しい取引が発生するたびに、サーバーはその取引の個別の株価を送信します。InputStream を介して、その情報を読み取り、Threads によって参照される StringBuffer に各文字を配置できます。char3に基づいて解析することで、株価/情報のセットを特定できます。
char1 - データを分離するため char3 - 株価/情報の終わりを意味します
サーバーから送信されるサンプルの株価情報フォーマット: stock_quote_name(char 1)some_data(char1)some_data(char1)(char3)
次に、私のアプリはその株価情報を解析して特定のデータを比較し、画面に表示されるときにどのように見えるかをフォーマットします。取引が徐々に(ゆっくり)行われると、アプリは完全に機能します。でも..
問題: 取引があまりにも速くほぼ同時に発生すると、アプリは送信された情報を効率的に処理できません。StringBuffer の内容は、次のトレードと組み合わされています。意味 1 つの StringBuffer に 2 つの株式情報。
フィールドは次のようになります: 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 に入れる方法について何か提案はありますか?