私はバイトごとにデータを読んでいます。メッセージ全体があると判断したら、それを文字列として別の関数に渡す必要があります。一部のメッセージは非常に大きくなる可能性がありますが、サイズは頻繁に異なります。どの実装が最も効率的だと思いますか。
public test class
{
char[] buffer = new char[MAX_SIZE_7200];
int bufferIndex = 0;
void parseData(ArrayList<Byte> msg, length)
{
while (!msg.isEmpty())
{
buffer[bufferIndex++] = (char) msg.remove(0);
if (isfullmessage)
{
parseData(new String(buffer, 0, bufferIndex);
bufferIndex = 0; //restart and continue parsing data
}
}
}
}
また:
public test class
{
List<Character> buffer = new ArrayList<Character>();
int bufferIndex = 0;
void parseData(ArrayList<Byte> msg, length)
{
while (!msg.isEmpty())
{
buffer.add((char) msg.remove(0));
if (isfullmessage)
{
StringBuilder builder = new StringBuilder(buffer.size());
for (Character ch: buffer)
{
builder.append(ch);
}
parseData(builder.toString());
buffer.clear();
}
}
}
}
また:
public test class
{
StringBuilder buffer = new StringBuilder();
int bufferIndex = 0;
void parseData(ArrayList<Byte> msg, length)
{
while (!msg.isEmpty())
{
buffer.append((char) msg.remove(0));
if (isfullmessage)
{
parseData(builder.toString());
buffer.clear(); //some stringbuilder clear function
}
}
}
}
または、より効率的な方法がありますか。完全なメッセージを含まないデータを処理する可能性があり、完全なメッセージを取得して処理するために関数を複数回実行する可能性があるため、完成したメッセージを関数の範囲外に保持する変数があることに注意してください。