byte collection based similar with ByteBuffer from java

20,274

Solution 1

MemoryStream can do everything you want:

  • .array() => .ToArray()
  • .clear() => .SetLength(0)
  • .put(byte[], int, int) => .Write(byte[], int, int)
  • .remaining() => .Length - .Position

If you want, you can create extension methods for Clear and Remaining:

public static class MemoryStreamExtensions
{
    public static void Clear(this MemoryStream stream)
    {
        stream.SetLength(0);
    }

    public static int Remaining(this MemoryStream stream)
    {
        return stream.Length - stream.Position;
    }
}

Solution 2

MemoryStream should have everything you are looking for. Combined with BinaryWriter to write different data types.

var ms = new MemoryStream();
ms.SetLength(100);

long remaining = ms.Length - ms.Position; //remaining()

byte[] array = ms.ToArray(); //array()

ms.SetLength(0); //clear()

ms.Write(buffer, index, count); //put(byte[], int, int)
Share:
20,274
pulancheck1988
Author by

pulancheck1988

Updated on July 09, 2022

Comments

  • pulancheck1988
    pulancheck1988 almost 2 years

    I need a C# implementation of something similar with ByteBuffer from Java. Methods of interest - .remaining() - returns the number of elements between the current position and the limit. - .array() - .clear() - .put(byte[], int, int)

    I started something with MemoryStream.. but no clear(), and a lot of improvisation Also, i found a c# implementation on Koders: http://www.koders.com/csharp/fid2F8CB1B540E646746D3ADCB2B0AC867A0A8DCB06.aspx?s=socket#L2.. which I will use.. but maybe you guys know something better

  • Ben Voigt
    Ben Voigt about 12 years
    Queue only allows adding and removing single elements.
  • Paul
    Paul over 10 years
    What about ByteBuffer.allocate(int) ?
  • Thomas Levesque
    Thomas Levesque over 10 years
    @Paul, new MemoryStream(int)