Я взаимодействую с аппаратным устройством, которое передает данные в мое приложение через Wi-Fi. Данные передаются просто отлично. Данные содержат символьный заголовок (DATA :), который указывает на начало новой записи. Проблема заключается в том, что данные, которые я получаю, не обязательно попадают на границу заголовка, поэтому я должен собирать данные, пока то, что я захватил, не содержит заголовок. Затем все, что предшествует заголовку, переходит в предыдущую запись, а все, что идет после него, входит в новую запись. У меня это работает, но мне интересно, если кто-то делал это раньше и у него есть хороший компьютерный способ решения проблемы.
Вот что я делаю:
Преобразовать NSData текущего чтения в NSString
Добавить строку NSSt в строку заполнителя
Проверка строки заполнителя для заголовка (DATA :). Если заголовка нет, просто дождитесь следующего чтения.
Если заголовок существует, добавьте все, что предшествует ему, к заполнителю предыдущей записи и передайте этот заполнитель в массив в качестве полной записи, которую я смогу затем проанализировать в полях.
Возьмите все, что отображается после заголовка, и поместите его в заполнитель записи, чтобы к нему можно было добавить в следующем чтении. Повторите шаги 3 - 5.
Дайте мне знать, если вы видите какие-либо недостатки с этим или у вас есть предложение для лучшего пути.
Кажется, для этого должен быть какой-то шаблон проектирования, но я не могу придумать один.
Спасибо.
ОБНОВЛЕНИЕ: Вот немного кода:
uint8_t buf[1024];
unsigned int len = 0;
len = [(NSInputStream *)stream read:buf maxLength:1024];
if(len) {
[data appendBytes:(const void *)buf length:len];
int bytesRead;
bytesRead += len;
} else {
NSLog(@"No data.");
}
Как изменить этот код, чтобы реализовать конечный автомат?