我正在逐字节读取数据。当我确定我有完整的消息时,我需要将它作为字符串传递给另一个函数。有些消息可能非常大,但大小经常变化。大家觉得哪种实现最有效:
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
}
}
}
}
还是有更有效的方法。请注意,我的变量在函数范围之外保存了我完成的消息,因为我可能会处理不包含完整消息的数据,并且可能需要多次执行函数来获取完整消息并对其进行处理。