mirror of
https://github.com/chylex/Brotli-Builder.git
synced 2024-11-24 22:42:50 +01:00
46 lines
1.5 KiB
C#
46 lines
1.5 KiB
C#
using System;
|
|
using System.IO;
|
|
using System.Text;
|
|
|
|
namespace BrotliLib.Brotli.Output{
|
|
/// <summary>
|
|
/// Stores all generated output in memory.
|
|
/// </summary>
|
|
public class BrotliOutputStored : IBrotliOutput{
|
|
public int OutputSize => (int)decompressedStream.Length;
|
|
|
|
public byte[] AsBytes => decompressedStream.ToArray();
|
|
public string AsUTF8 => Encoding.UTF8.GetString(decompressedStream.ToArray());
|
|
|
|
private readonly MemoryStream decompressedStream = new MemoryStream();
|
|
|
|
public BrotliOutputStored(){}
|
|
|
|
private BrotliOutputStored(BrotliOutputStored original){
|
|
original.decompressedStream.CopyTo(decompressedStream);
|
|
}
|
|
|
|
public void Write(byte value){
|
|
decompressedStream.WriteByte(value);
|
|
}
|
|
|
|
public void Write(byte[] bytes){
|
|
decompressedStream.Write(bytes, 0, bytes.Length);
|
|
}
|
|
|
|
public byte GetByte(int distance){
|
|
long prevPos = decompressedStream.Position;
|
|
|
|
decompressedStream.Position -= distance;
|
|
int readByte = decompressedStream.ReadByte();
|
|
decompressedStream.Position = prevPos;
|
|
|
|
return readByte >= 0 ? (byte)readByte : throw new ArgumentOutOfRangeException(nameof(distance), "Distance is out of range: " + distance + " > " + decompressedStream.Length);
|
|
}
|
|
|
|
public IBrotliOutput Clone(){
|
|
return new BrotliOutputStored(this);
|
|
}
|
|
}
|
|
}
|