Як зафіксувати асинхронні та переривчасті дані в iOS?

Платформа: iOS з TCP/IP comms.

Нижче наведено приклад мого вхідного потоку даних.

$ PLTIT, HV, 0,20, M, 0,00, D, -58,70, D, 0,30, M * 71
  $ PLTIT, HV, 1,90, M, 0,00, D, -8,30, D, 1,90, M * 41

Дійсний канал повідомлення виглядає так:

$PLTIT,HV,1.90,M,0.00,D,-8.30,D,1.90,M*41

Але могло бути моменти, коли я це отримую:

[time n+0]  $PLTIT,HV,0.20,M,0.00,D,-58.70,D,0.30,M*71
[time n+1]  $PLTIT,HV,1.90,M,
[time n+2]  0.00,D,-8.30,D,1.90
[time n+3]  ,M*41
[time n+4]  $PLTIT,HV,0.20,M,0.00,D,-58.70,D,0.30,M*71
[time n+5]  $PLTIT,HV,0.20,M,
[time n+6]  0.00,D,-58.70,D,0.30,M*71
[time n+7]  $PLTIT,HV,0.20,M,0.00,D,-58.70,D,0.30,M*71
[time n+8]  $PLTIT,HV,0.20,M,0.00,D,-58.70,D,0.30,M*71

Результатом є розбита рамка повідомлень посередині.

Які об'єкти/контейнери можна використовувати під IOS, щоб дозволити мені правильно збирати всі байти даних для синтаксичного аналізу, а не втрачати будь-які біти через деякі переривчасті коми або обладнання?

0

1 Відповіді

Простий буфер будь-якого різновиду повинен зробити трюк. Якщо ваші дані завжди є текстовими, ви можете просто додати до NSMutableString .

Все, що вам потрібно зробити, це додати дані, перевірте, чи містить буфер більше одного екземпляра символу $ (який я вважаю вашим роздільником між записами), і якщо він обробляє кожен запис, крім самого останнього, залишаючи останній в буфері, доки не з'явиться чергова частина даних.

0
додано
Ці дані завжди є текстовими, а маркери розмежування - "$" та "\ n" між фреймами. Буде недостатньо NSMutableString, або можливо, CHCircularBufferQueue може бути краще?
додано Автор Sebastian Dwornik, джерело
IT KPI iOS
IT KPI iOS
74 учасників

Чат обсуждения IOS. - Оффтоп, флуд, оскорбления и вбросы здесь не приняты. - За нарушение - предупреждение или mute на неделю. - За спам и рекламу - ban. Все чаты IT KPI: https://t.me/itkpi/602

ios_jobs_ua
ios_jobs_ua
27 учасників

Mobile Dev Jobs UA
Mobile Dev Jobs UA
20 учасників

Публикуем вакансии и запросы на поиск работы по направлению iOS, Android, Xamarin, RN и т.д.