Самый быстрый способ вызвать определенный метод через решение - PullRequest
0 голосов
/ 12 марта 2012

У меня вопрос к управлению вызовами.

Я получаю сообщение с полезной нагрузкой 3 байта в byte[].Различные биты приводят к вызову другого метода.Я сделал это с помощью логического AND между байтом и шифетом 1, чтобы получить значение бита.Я использовал ififif и т. Д. Для вызова конкретного методаЕсть ли другая возможность реализовать это, может быть, HashMap или что-то еще?

По крайней мере, я вынужден использовать макс.Java 1.4

Привет, фнобби

Ответы [ 2 ]

0 голосов
/ 12 марта 2012

Это зависит от того, сколько разных методов вы вызываете.Если оно меньше (я предполагаю здесь) 20, я бы использовал простые тесты с битовой маской для int (что составляет 4 байта - используйте младшие 3) с if().

Например:

public static void callMethod(byte[] bytes) {
    int bits = (bytes[2] & 0xFF) << 16 +
               (bytes[1] & 0xFF) << 8 + 
               (bytes[0] & 0xFF);
    if ((bits & 1) > 0) {
        methodForBit0Set(bytes);
    }
    if ((bits & 2) > 0) {
        methodForBit1Set(bytes);
    }
    if ((bits & 4) > 0) {
        methodForBit3Set(bytes);
    }
    // etc
}

Если вы вызываете только один метод, а затем останавливаетесь, вы можете использовать elses между ifs и, возможно, захотите упорядочить тесты в порядке наиболее частосначала ожидается.

Использование хэш-карты не будет , что намного быстрее, чем эти чрезвычайно быстрые операции, ИМХО, даже если у вас много тестов, и это легче читать, отлаживать и поддерживать.

0 голосов
/ 12 марта 2012

Вы можете использовать переключатель, даже в Java 1.4. Переключатели могут быть вложенными, когда взаимодействуют разные байты. Я предполагаю, что у вас нет 16 миллионов возможных методов для вызова. (256 ^ 3) * * +1001

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...