Ricevo i dati del sensore come un flusso binario di byte. Questo flusso non è sempre della stessa lunghezza e non include lo stesso set di dati ogni volta. Se il sensore non ha inviato un campo, è semplicemente assente, non null. I primi 62 byte di dati sono sempre prevedibili, ma dopo è tutto in aria. Tuttavia, il messaggio è suddiviso in sezioni, ciascuna con un valore di intestazione che descrive i dati procedurali.
La vecchia implementazione era di leggere l'intestazione e fare un confronto bit a bit con una maschera per indicare se il campo era popolato o meno. Ciò si è verificato per ogni valore che potrebbe essere stato scritto nel flusso dal sensore. Un esempio è il seguente (C #):
// declare bitmask
private static int FIELD_SPECIFIC_BITMASK = 0x01;
public Task Process(BinaryReader reader)
{
// read section's header
int sectionHeader = reader.ReadInt32;
if((sectionHeader & FIELD_SPECIFIC_BITMASK) !=0)
{
reader.ReadByte()
}
}
Ci deve essere un modo più efficiente e più pulito di fare questa scrittura? Ci sono dozzine di campi in cinque sezioni, e questo sembra inefficiente, ma non sono stato in grado di trovare una soluzione migliore.