diff --git a/src/main/AdrianKousz.Util/ExtendedBinaryReader.cs b/src/main/AdrianKousz.Util/ExtendedBinaryReader.cs index 8cc9ff2..f44304e 100644 --- a/src/main/AdrianKousz.Util/ExtendedBinaryReader.cs +++ b/src/main/AdrianKousz.Util/ExtendedBinaryReader.cs @@ -7,16 +7,17 @@ namespace AdrianKousz.Util public class ExtendedBinaryReader : BinaryReader { public bool Strict; - public Encoding Encoding { get; private set; } private const string ErrorChooseMethod = "Choose string writing method"; private const string ErrorHasNull = "String contains trailing null"; private const string ErrorHasNoNull = "String does not contain trailing null"; - public ExtendedBinaryReader(Stream stream, Encoding enc, bool strict = true) - : base(stream, enc) + private readonly char[] nullChar = new char[] { '\0' }; + private readonly Encoding encoding; + + public ExtendedBinaryReader(Stream stream, Encoding enc, bool strict = true) : base(stream, enc) { - Encoding = enc; + encoding = enc; Strict = strict; } @@ -41,7 +42,7 @@ namespace AdrianKousz.Util { if (len == 0) return ""; var array = ReadBytes(len); - var str = Encoding.GetString(array); + var str = encoding.GetString(array); var index = -1; if (expectNull || Strict) index = str.IndexOf("\0"); diff --git a/src/main/AdrianKousz.Util/ExtendedBinaryWriter.cs b/src/main/AdrianKousz.Util/ExtendedBinaryWriter.cs index 1c194b4..40df71c 100644 --- a/src/main/AdrianKousz.Util/ExtendedBinaryWriter.cs +++ b/src/main/AdrianKousz.Util/ExtendedBinaryWriter.cs @@ -6,14 +6,13 @@ namespace AdrianKousz.Util { public class ExtendedBinaryWriter : BinaryWriter { - public Encoding Encoding { get; private set; } - private const string ErrorChooseMethod = "Choose string writing method"; - public ExtendedBinaryWriter(Stream stream, Encoding enc) - : base(stream, enc) + private readonly Encoding encoding; + + public ExtendedBinaryWriter(Stream stream, Encoding enc) : base(stream, enc) { - Encoding = enc; + this.encoding = enc; } public override void Write(string value) @@ -33,13 +32,13 @@ namespace AdrianKousz.Util public void WriteStringRaw(string value) { - var array = Encoding.GetBytes(value); + var array = encoding.GetBytes(value); Write(array); } public void WriteStringInt16(string value) { - var array = Encoding.GetBytes(value); + var array = encoding.GetBytes(value); var len = (Int16)array.Length; Write(len); Write(array); @@ -47,7 +46,7 @@ namespace AdrianKousz.Util public void WriteStringInt32(string value) { - var array = Encoding.GetBytes(value); + var array = encoding.GetBytes(value); var len = (Int32)array.Length; Write(len); Write(array); @@ -56,18 +55,18 @@ namespace AdrianKousz.Util public void WriteStringPadded(string value, int len) { var array = new byte[len]; - Encoding.GetBytes(value, 0, value.Length, array, 0); + encoding.GetBytes(value, 0, value.Length, array, 0); Write(array); } public int GetByteCount(string value) { - return Encoding.GetByteCount(value); + return encoding.GetByteCount(value); } public int GetZByteCount(string value) { - return Encoding.GetByteCount(value + "\0"); + return encoding.GetByteCount(value + "\0"); } } } diff --git a/src/main/AdrianKousz.Util/NonDisposingStreamWrapper.cs b/src/main/AdrianKousz.Util/NonDisposingStreamWrapper.cs deleted file mode 100644 index d11b2dd..0000000 --- a/src/main/AdrianKousz.Util/NonDisposingStreamWrapper.cs +++ /dev/null @@ -1,142 +0,0 @@ -using System; -using System.IO; - -/** - * About closing and disposing, also see: - * http://joeduffyblog.com/2004/12/12/follow-up-should-you-invoke-close-andor-dispose-on-a-stream/ - * https://github.com/dotnet/corefx/blob/master/src/System.IO.Compression/src/System/IO/Compression/DeflateStream.cs - */ - -namespace AdrianKousz.Util -{ - public sealed class NonDisposingStreamWrapper : Stream - { - private bool closed = false; - - public Stream BaseStream { get; private set; } - - public NonDisposingStreamWrapper(Stream stream) - { - BaseStream = stream; - } - - protected override void Dispose(bool disposing) - { - BaseStream = null; - } - - private void EnsureNotDisposed() - { - if (BaseStream == null) { - throw new ObjectDisposedException(null); - } - } - - public override bool CanRead - { - get { return BaseStream != null && BaseStream.CanRead; } - } - - public override bool CanSeek - { - get { return BaseStream != null && BaseStream.CanSeek; } - } - - public override bool CanWrite - { - get { return BaseStream != null && BaseStream.CanWrite; } - } - - public override long Length - { - get - { - EnsureNotDisposed(); - return BaseStream.Length; - } - } - - public override long Position - { - get - { - EnsureNotDisposed(); - return BaseStream.Position; - } - set - { - EnsureNotDisposed(); - BaseStream.Position = value; - } - } - - public override IAsyncResult BeginRead(byte[] buffer, int offset, int count, - AsyncCallback callback, object state) - { - EnsureNotDisposed(); - return BaseStream.BeginRead(buffer, offset, count, callback, state); - } - - public override IAsyncResult BeginWrite(byte[] buffer, int offset, int count, - AsyncCallback callback, object state) - { - EnsureNotDisposed(); - return BaseStream.BeginWrite(buffer, offset, count, callback, state); - } - - public override int EndRead(IAsyncResult asyncResult) - { - EnsureNotDisposed(); - return BaseStream.EndRead(asyncResult); - } - - public override void EndWrite(IAsyncResult asyncResult) - { - EnsureNotDisposed(); - BaseStream.EndWrite(asyncResult); - } - - public override void Flush() - { - EnsureNotDisposed(); - BaseStream.Flush(); - } - - public override int Read(byte[] buffer, int offset, int count) - { - EnsureNotDisposed(); - return BaseStream.Read(buffer, offset, count); - } - - public override int ReadByte() - { - EnsureNotDisposed(); - return BaseStream.ReadByte(); - } - - public override long Seek(long offset, SeekOrigin origin) - { - EnsureNotDisposed(); - return BaseStream.Seek(offset, origin); - } - - public override void SetLength(long value) - { - EnsureNotDisposed(); - BaseStream.SetLength(value); - } - - public override void Write(byte[] buffer, int offset, int count) - { - EnsureNotDisposed(); - BaseStream.Write(buffer, offset, count); - } - - public override void WriteByte(byte value) - { - EnsureNotDisposed(); - BaseStream.WriteByte(value); - } - } -} - diff --git a/src/main/AdrianKousz.Util/UncompressedDeflateStream.cs b/src/main/AdrianKousz.Util/UncompressedDeflateStream.cs index 7492e83..a0f51f8 100644 --- a/src/main/AdrianKousz.Util/UncompressedDeflateStream.cs +++ b/src/main/AdrianKousz.Util/UncompressedDeflateStream.cs @@ -8,10 +8,12 @@ namespace AdrianKousz.Util private static readonly byte[] EOS = new byte[] {0x01, 0x00, 0x00, 0xff, 0xff}; public Stream BaseStream { get; private set; } + private bool _leaveOpen; - public UncompressedDeflateStream (Stream stream) : base() + public UncompressedDeflateStream (Stream stream, bool leaveOpen = false) : base() { BaseStream = stream; + _leaveOpen = leaveOpen; } public override void Write(byte[] buffer, int offset, int count) @@ -32,13 +34,15 @@ namespace AdrianKousz.Util protected override void Dispose(bool disposing) { + // Also see: + // https://github.com/dotnet/corefx/blob/master/src/System.IO.Compression/src/System/IO/Compression/DeflateStream.cs try { if (disposing && BaseStream != null) { BaseStream.Write(EOS, 0, EOS.Length); } } finally { try { - if (disposing && BaseStream != null) { + if (!_leaveOpen && disposing && BaseStream != null) { BaseStream.Dispose(); } } finally { diff --git a/src/main/ExUtil.csproj b/src/main/ExUtil.csproj index 59ed74a..6e5294f 100644 --- a/src/main/ExUtil.csproj +++ b/src/main/ExUtil.csproj @@ -38,6 +38,5 @@ - \ No newline at end of file