2016-05-05 1 views
0

Actuellement, je travaille pour développer un MemoryStream en utilisant BinaryWriter.en ajoutant un seul bit dans MemoryStream en utilisant BinaryWriter

J'ai plusieurs types (c.-à-d. Type de données) de données que je mets dans MemoryStream un par un. Par souci de dynamisme, j'ai besoin de décider si certains enregistrements doivent être insérés dans MemoryStream ou non et en lisant ce MemoryStream, il devrait être lu en conséquence.

par exemple suppose que je suis revenu de l'insertion d'enregistrements si le format des dossiers devrait être:

byte sr_No; double grandTotal;

mais comme dans la plupart des cas au large des sr_No sera consécutive, à moins que holydays. donc je ne devrais pas mettre sr_No partie de chaque enregistrement. Au lieu de cela, je prévois un single bit 0 pour sr_No absent et 1 pour la date actuelle.

donc en gros ce que je pense d'avoir un 1 bit qui montrera si l'octet à venir (comme sr_No est l'octet) est contenant sr_No ou directement GrandTotal (comme sr_No été sautée) comme celui-ci

la situation actuelle sr_No :

1[1 byte of sr_No][4 bytes of grandTotal]

sr_No Situation absente:

0[4 bytes of grandTotal]

mais ce n'est pas possible, donc je peux faire un léger décalage sur MemoryStream (peut-être aussi pas possible) d'avoir un en-tête d'un bit.

ou il peut y avoir un autre moyen de l'atteindre.

Répondre

3

donc ma question comment puis-je écrire et lire (en utilisant BinaryReader) un seul bit de/vers MemoryStream?

Vous ne pouvez pas. La plus petite "unité" de données dans un flux est un octet. Si vous avez un autre octet dont vous n'utilisez que 7 bits, vous pouvez inclure le bit supplémentaire dans cet octet, mais sinon vous avez juste besoin d'écrire tout un octet supplémentaire pour indiquer ce qui est présent.

+0

Puis-je faire une opération peu sage comme le décalage ?? Je ne suis pas très clair. merci par le chemin @Jon Skeet – Amit

+0

@AmitNatural: Eh bien oui, vous pouvez faire le transfert de bits - mais que voulez-vous que cela accomplisse? Qu'est-ce qui vous a incité à poser cette question? –

+0

mon exigence de base était d'ajouter un seul bit, car il n'est pas possible que je doive aller travailler autour de la solution. dans mon code exact, il y a une valeur variée (0-255 [j'ai fait cette gamme pour l'insérer dans un octet et je peux la rager à 0-127, 7bits nombre et faire le plus droit dans cet octet inutilisé pour ce bit changement de vitesse.]). mais comme je l'ai dit je ne suis pas clair que le décalage sur MemoryStream est possible ou non! et si oui, comment puis-je l'utiliser – Amit