这里的第一个问题,希望您能对我有所帮助:)

该代码(下面)是一段时间后写的一些代码,它监听打开的套接字上的传入数据包。该代码运行良好,并且设法监听所有传入的消息,但是问题似乎出在下面的此函数上。似乎该代码始终在运行,这导致它使用大量的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;
        }
    }

最佳答案

如果Global.c_iRxArraySize具有固定大小,则可以尝试重用缓冲区并进行转换,也可以尝试重用SimpleDateFormat,无需为每个调用创建和销毁它,并且DataListReceived可以在此过程结束时重用和清除。

在此范围之外声明所有这些变量,然后重用,我认为至少是第一步。

10-08 17:04