/// <summary> /// Saves writer content to the given byte[] and it's offset. /// </summary> /// <param name="data">The byte[].</param> /// <param name="offset">The offset.</param> /// <returns></returns> public int ToArray(byte[] data, int offset) { long size = 0; ManagedBinaryMemoryWriterSegment segment = this.segment; while (segment != null) { size += segment.Length; segment = segment.Next; } if (data.Length < size + offset) { throw new ArgumentException("Not enough memory in data.", "data"); } int position = offset; segment = this.segment; while (segment != null) { segment.ToArray(data, ref position); segment = segment.Next; } return((int)size); }
/// <summary> /// Generates a new array with the contents of this writer. Beware, the content shouldn't exceed .NET memory array limit of nearly 2 GiB. /// </summary> /// <returns>The array.</returns> public byte[] ToArray() { long size = 0; ManagedBinaryMemoryWriterSegment segment = this.segment; while (segment != null) { size += segment.Length; segment = segment.Next; } if (size > 2147000000) { throw new OutOfMemoryException("Array buffers can't exceed 2147000000 bytes. Write to a stream, if you generated bigger data than the near 2 GiB limit."); } byte[] data = new byte[size]; int position = 0; segment = this.segment; while (segment != null) { segment.ToArray(data, ref position); segment = segment.Next; } return(data); }