Nano Hash - криптовалюты, майнинг, программирование

Java: как работает преобразование массива байтов в строку JSON (которая должна быть преобразована в объект JSON)?

Я наткнулся на учебник по Android и увидел следующий метод, который я не совсем понимаю:

public static String bytesToHex(byte[] bytes) {
        char[] hexChars = new char[bytes.length * 2];
        for (int j = 0; j < bytes.length; j++) {
            int v = bytes[j] & 0xFF;
            hexChars[j * 2] = hexArray[v >>> 4];
            hexChars[j * 2 + 1] = hexArray[v & 0x0F];
        }
        return new String(hexChars);
    }

Основная цель этого метода — преобразовать массив байтов, полученный через веб-сокет, в строку json, которая должна быть преобразована в объект json, например:

@Override
            public void onMessage(byte[] data) {
                Log.d(TAG, String.format("Got binary message! %s",
                        bytesToHex(data)));

                // Message will be in JSON format
                parseMessage(bytesToHex(data));
            }

....

private void parseMessage(final String msg) {

        try {
            JSONObject jObj = new JSONObject(msg);

...

Как работает метод bytesToHex? Я только знаю, что он перебирает массив байтов, а затем выполняет операцию И, которая сохраняет байт таким, какой он есть (в чем я не вижу смысла). После этой строчки я потерялся. Что делает >>>?


Ответы:


1

Например, j теперь 0, а bytes[j] теперь 1110 1111.

Я думаю, что int v = bytes[j] & 0xFF; эквивалентно int v = bytes[j];, потому что один байт занимает 8 бит в Java, а 0xFF - это 8 заданных битов (1111 1111), а 1110 1111 и 1111 1111 равно 1110 1111.

Теперь v 1110 1111.

hexChars[j * 2] = hexArray[v >>> 4]; отображает старшие 4 бита v (1110) в char и сохраняет их в hexChars[0], поскольку >>> означает «переместить биты вправо и заполнить нулями», поэтому 1110 1111 >>> 4 равно 0000 1110.

hexChars[j * 2 + 1] = hexArray[v & 0x0F]; отображает младшие 4 бита v (1111) в char и сохраняет их в hexChars[1], поскольку 1110 1111 и 0000 1111 (0x0F) равны 0000 1111.

О том, почему такая строка может быть проанализирована как JSON, я думаю, вам нужно прочитать что-нибудь о массиве hexArray, чтобы узнать, как эти целые числа в диапазоне от 0000 до 1111 сопоставляются с char, чтобы вы могли знать, как выглядит выходная строка.

12.01.2016
Новые материалы

Кластеризация: более глубокий взгляд
Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

Как написать эффективное резюме
Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

Частный метод Python: улучшение инкапсуляции и безопасности
Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

Как я автоматизирую тестирование с помощью Jest
Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..