a575963da9
Former-commit-id: da6be194a6b1221998fc28233f2503bd61dd9d14
136 lines
3.4 KiB
C#
136 lines
3.4 KiB
C#
using System;
|
|
using System.IO;
|
|
using System.Linq;
|
|
|
|
namespace SharpCompress.IO
|
|
{
|
|
internal class MarkingBinaryReader : BinaryReader
|
|
{
|
|
|
|
public MarkingBinaryReader(Stream stream)
|
|
: base(stream)
|
|
{
|
|
}
|
|
|
|
public long CurrentReadByteCount { get; private set; }
|
|
|
|
public void Mark()
|
|
{
|
|
CurrentReadByteCount = 0;
|
|
}
|
|
|
|
public override int Read()
|
|
{
|
|
throw new NotImplementedException();
|
|
}
|
|
|
|
public override int Read(byte[] buffer, int index, int count)
|
|
{
|
|
throw new NotImplementedException();
|
|
}
|
|
|
|
public override int Read(char[] buffer, int index, int count)
|
|
{
|
|
throw new NotImplementedException();
|
|
}
|
|
|
|
public override bool ReadBoolean()
|
|
{
|
|
return BitConverter.ToBoolean(ReadBytes(1), 0);
|
|
}
|
|
|
|
public override byte ReadByte()
|
|
{
|
|
return ReadBytes(1).Single();
|
|
}
|
|
|
|
public override byte[] ReadBytes(int count)
|
|
{
|
|
CurrentReadByteCount += count;
|
|
var bytes = base.ReadBytes(count);
|
|
if (bytes.Length != count)
|
|
{
|
|
throw new EndOfStreamException(string.Format("Could not read the requested amount of bytes. End of stream reached. Requested: {0} Read: {1}", count, bytes.Length));
|
|
}
|
|
return bytes;
|
|
}
|
|
|
|
public override char ReadChar()
|
|
{
|
|
throw new NotImplementedException();
|
|
}
|
|
|
|
public override char[] ReadChars(int count)
|
|
{
|
|
throw new NotImplementedException();
|
|
}
|
|
|
|
#if !PORTABLE
|
|
public override decimal ReadDecimal()
|
|
{
|
|
return ByteArrayToDecimal(ReadBytes(16), 0);
|
|
}
|
|
|
|
private decimal ByteArrayToDecimal(byte[] src, int offset)
|
|
{
|
|
//http://stackoverflow.com/a/16984356/385387
|
|
var i1 = BitConverter.ToInt32(src, offset);
|
|
var i2 = BitConverter.ToInt32(src, offset + 4);
|
|
var i3 = BitConverter.ToInt32(src, offset + 8);
|
|
var i4 = BitConverter.ToInt32(src, offset + 12);
|
|
|
|
return new decimal(new[] { i1, i2, i3, i4 });
|
|
}
|
|
#endif
|
|
|
|
public override double ReadDouble()
|
|
{
|
|
return BitConverter.ToDouble(ReadBytes(8), 0);
|
|
}
|
|
|
|
public override short ReadInt16()
|
|
{
|
|
return BitConverter.ToInt16(ReadBytes(2), 0);
|
|
}
|
|
|
|
public override int ReadInt32()
|
|
{
|
|
return BitConverter.ToInt32(ReadBytes(4), 0);
|
|
}
|
|
|
|
public override long ReadInt64()
|
|
{
|
|
return BitConverter.ToInt64(ReadBytes(8), 0);
|
|
}
|
|
|
|
public override sbyte ReadSByte()
|
|
{
|
|
return (sbyte)ReadByte();
|
|
}
|
|
|
|
public override float ReadSingle()
|
|
{
|
|
return BitConverter.ToSingle(ReadBytes(4), 0);
|
|
}
|
|
|
|
public override string ReadString()
|
|
{
|
|
throw new NotImplementedException();
|
|
}
|
|
|
|
public override ushort ReadUInt16()
|
|
{
|
|
return BitConverter.ToUInt16(ReadBytes(2), 0);
|
|
}
|
|
|
|
public override uint ReadUInt32()
|
|
{
|
|
return BitConverter.ToUInt32(ReadBytes(4), 0);
|
|
}
|
|
|
|
public override ulong ReadUInt64()
|
|
{
|
|
return BitConverter.ToUInt64(ReadBytes(8), 0);
|
|
}
|
|
}
|
|
} |