Je dois passer un objet Stream à une API qui va sérialiser certaines données dans le flux. Je ne connais pas la quantité de données à l'avance, et je n'ai aucun contrôle sur ce code. Cependant, je veux limiter la taille du flux d'un certain nombre. Puis-je faire en sorte que MemoryStream lance une exception lorsque sa longueur atteint une limite spécifiée? Quelque chose comme ceci:Comment limiter la longueur de MemoryStream?
var stream = new MemoryStream(...); // I want to specify MaxLength=10 somehow...
for (byte i = 0; i < 9; i++)
stream.WriteByte(i); // ok
stream.WriteByte(10); // this should throw
Une façon d'atteindre ce comportement est de passer outre SetLength, recherche, écriture et méthodes de writeByte (quoi que ce soit d'autre?).
Existe-t-il une façon plus simple ou plus efficace de le faire? Ai-je manqué des constructeurs ou des propriétés existants?
Quelle est l'API que vous appelez? Est-ce non géré? –
Il est géré. En outre, nous pouvons supposer que l'exception générée par le flux sera gérée de manière appropriée. Ceci est juste une autre partie interne de notre projet, donc le nom de l'API ne vous dira rien. Techniquement, nous pourrions même changer l'API pour qu'elle accepte la longueur maximale en paramètre, mais j'aimerais vraiment éviter cela. – AnatoliB
Vous pouvez faire quelque chose comme new MemoryStream (new byte [xxx]) (http://msdn.microsoft.com/en-us/library/e55f3s5k.aspx)? – Bert