Разбор строк Android - PullRequest
       2

Разбор строк Android

0 голосов
/ 18 августа 2011

Я пишу приложение для Android, которое получает данные через Bluetooth. Входящие байты могут быть любого размера, например: 00023> 024935928598235> 9284>

Как вы можете видеть, каждый набор разделен ">". Данные поступают очень быстро. Я хотел бы некоторые идеи для реализации. Смотри, моя проблема в том, что мне нужно прочитать данные в байтовый массив, который затем может преобразовать их в строку и разделить их в соответствии с разделителем ">".

так в приведенном выше примере:

00023 024935928598235 9284

Если я установил byte [] data = new byte [8], то при чтении поступающих данных он может получить 00023> 02, что не то, что я хочу. Я не уверен, как реализовать что-то подобное. Есть идеи?

Ответы [ 2 ]

0 голосов
/ 19 августа 2011

Я бы порекомендовал использовать буферизованный поток, но, возможно, немного больше, чем 8 байтов, как вы предлагаете, и прочитать один и один символ от начала потока, накапливая строку.Когда вы встретите «>», отправьте накопленное вами значение в очередь для фоновой обработки потока.Используйте стандартные методы реализации производителя / потребителя (например, шаблон Monitor) для связи через очередь.

0 голосов
/ 19 августа 2011

Вот один из подходов. Вам нужно будет реализовать readDataFromBluetooth () и каким-то образом установить dataAvailable, но это должно привести вас на правильный путь.

    byte[] data = new byte[1024];
    List<String> chunks = new LinkedList<String>();
    StringBuilder chunk = new StringBuilder();

    while (dataAvailable) {
        data = readDataFromBluetooth();

        for (byte b : data) {
            if (b == '<') {
                chunks.add(chunk.toString());
                chunk.setLength(0);
            } else {
                chunk.append(b);
            }
        }
    }

    if (chunk.length() > 0)
        chunks.add(chunk.toString());
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...