这里的第一个问题,我希望你能帮助我:)
代码(下面)是一段时间写入的代码,用于侦听打开的套接字上的传入数据包。代码运行良好并设法监听所有传入的消息,但问题似乎是下面的这个功能。看起来这个代码总是在运行,这导致它使用大量的CPU能力和大量的RAM。由于有很多代码,我无法显示更多代码。只是想知道是否有更好的方法来了解数据包已经到达。这是代码:
**
{
if (socket.getInputStream() != null)
{
if (socket.getInputStream().available() > 0)
{
int i = socket.getInputStream().available();
byte[] buffer = new byte[Global.c_iRxArraySize];
socket.getInputStream().read(buffer);
short[] converted = new short[Global.c_iRxArraySize];
for (int j = 0; j < i; j++)
{
converted[j] = (short) (buffer[j] & 0xff);
}
Global.sNoTransmittionRecievedTimeout = 0;
p_DebugreceivedMessageSize = FindPacketSize(converted);
p_DebugreceivedMessageCount = p_DebugreceivedMessageCount + 1;
p_DebugreceivedMessageData = GetPacketContents(converted);
Date date = new Date();
SimpleDateFormat p_DebugreceivedMessageTime = new SimpleDateFormat("MM/dd/yyyy h:mm:ss a");
DateReceivedData = p_DebugreceivedMessageTime.format(date);
List<String> DataListReceived = new ArrayList<String>();
DataListReceived.add(Arrays.toString(p_DebugreceivedMessageData));
MobileRxProtocol(converted);
Global.p_ReconnectionTimer = 0;
}
}
答案 0 :(得分:2)
如果Global.c_iRxArraySize是固定大小的,你可以尝试重用缓冲区并转换,也可以尝试重用SimpleDateFormat,不需要为每次调用创建和销毁它,并且DataListReceived可以在最后重用和清理这个过程。
在此范围之外声明所有这些变量并重复使用,我认为这至少是第一步。