J'ai besoin de porter le code de Java en C#. Dans le code Java, les méthodes "ByteBuffer.flip()" et "ByteBuffer.slice" sont utilisées, et je ne sais pas comment traduire cela.Quel est l'équivalent de "ByteBuffer.flip" & "ByteBuffer.slice" dans .NET?
J'ai lu cette question (An equivalent of javax.nio.Buffer.flip() in c#), mais même si une réponse est donnée, je n'arrive pas à comprendre comment l'appliquer. Selon Tom Hawtin, je devrais "Définir la limite à la position actuelle, puis mettre la position à zéro" dans le tableau sous-jacent. Je ne suis pas sûr de la façon de changer ces valeurs. (Si vous pouviez expliquer la logique sous-jacente, cela m'aiderait beaucoup :)
Comme pour le ByteBuffer.slice, je n'ai aucune idée sur la façon de le traduire.
EDIT: S'il peut être plus clair avec le code actuel, je vais le poster:
Java:
ByteBuffer buff;
buff.putShort((short) 0);
buff.put(customArray);
buff.flip();
buff.putShort((short) 0);
ByteBuffer b = buff.slice();
short size = (short) (customFunction(b) + 2);
buff.putShort(0, size);
buff.position(0).limit(size);
Jusqu'à présent, ma traduction en C# .NET:
BinaryWriter b = new BinaryWriter(); //ByteBuffer buff;
b.Write((short)0); // buff.putShort((short) 0);
b.Write(paramStream.ToArray()); // buff.put(customArray);
b.BaseStream.SetLength(b.BaseStream.Position); // buff.flip; (not sure)
b.BaseStream.Position = 0; // buff.flip; too (not sure)
b.Write((short)0); // buff.putShort((short) 0)
??? // ByteBuffer b = buff.slice();
// Not done but I can do it, short size = (short) (customFunction(b) + 2);
??? // How do I write at a particular position?
??? // buff.position(0).limit(size); I don't know how to do this
Merci!
EDIT: modification de b.BaseStream.SetLength(b.BaseStream.Length);
en b.BaseStream.SetLength(b.BaseStream.Position);
, en fonction des documents Java.
Quick FYI: Ces équivalents seraient en .NET, pas en C#. –
Merci :) Édité. – Lazlo
Quel type de structure utilisez-vous pour le ByteBuffer? Liste, octet [], etc? –
SwDevMan81