using System; using System.IO; namespace TwlBackupBlock { /// /// BinaryReaderのReadをラップするクラスです。 /// public class ExtBinaryReader : IDisposable { private bool disposed; private BinaryReader br; /// /// 指定したMemoryStreamをもとに、ExtBinaryReaderクラスの新しいインスタンスを初期化します。 /// /// public ExtBinaryReader(MemoryStream ms) { disposed = false; br = new BinaryReader(ms); } ~ExtBinaryReader() { Dispose(false); } /// /// ExtBinaryReaderを破棄します。 /// public void Dispose() { Dispose(true); GC.SuppressFinalize(this); } /// /// ExtBinaryReaderを破棄します。 /// /// BinaryReaderも破棄する場合はtrue。それ以外の場合はfalse。 protected virtual void Dispose(bool disposing) { if (!disposed) { if (disposing) { ((IDisposable)br).Dispose(); } } disposed = true; } /// /// 現在のストリームから次のバイトを読み取り、ストリームの現在位置を1バイトだけ進めます。 /// /// データを読み取るバッファ public void Read(ref Byte value) { value = br.ReadByte(); } /// /// 現在のストリームから2バイト符号なし整数を読み取り、ストリームの現在位置を2バイトだけ進めます。 /// /// データを読み取るバッファ public void Read(ref UInt16 value) { value = br.ReadUInt16(); } /// /// 現在のストリームから4バイト符号なし整数を読み取り、ストリームの現在位置を4バイトだけ進めます。 /// /// データを読み取るバッファ public void Read(ref UInt32 value) { value = br.ReadUInt32(); } /// /// 現在のストリームから8バイト符号なし整数を読み取り、ストリームの現在位置を8バイトだけ進めます。 /// /// データを読み取るバッファ public void Read(ref UInt64 value) { value = br.ReadUInt64(); } /// /// 現在のストリームから2バイト符号付き整数を読み取り、ストリームの現在位置を2バイトだけ進めます。 /// /// データを読み取るバッファ public void Read(ref Int16 value) { value = br.ReadInt16(); } /// /// 現在のストリームから4バイト符号付き整数を読み取り、ストリームの現在位置を4バイトだけ進めます。 /// /// データを読み取るバッファ public void Read(ref Int32 value) { value = br.ReadInt32(); } /// /// 現在のストリームから8バイト符号付き整数を読み取り、ストリームの現在位置を8バイトだけ進めます。 /// /// データを読み取るバッファ public void Read(ref Int64 value) { value = br.ReadInt64(); } /// /// 現在のストリームから指定した配列にバイトを読み取り、ストリームの現在位置を指定した配列のバイト数だけ進めます。 /// /// データを読み取るバッファ public void Read(Byte[] buffer) { br.Read(buffer, 0, buffer.Length); } /// /// 現在のストリームから指定した配列に2バイト符号なし整数を読み取り、ストリームの現在位置を指定した配列のバイト数だけ進めます。 /// /// データを読み取るバッファ public void Read(UInt16[] buffer) { for (int i = 0; i < buffer.Length; i++) { Read(ref buffer[i]); } } /// /// 現在のストリームから指定した配列に4バイト符号なし整数を読み取り、ストリームの現在位置を指定した配列のバイト数だけ進めます。 /// /// データを読み取るバッファ public void Read(UInt32[] buffer) { for (int i = 0; i < buffer.Length; i++) { Read(ref buffer[i]); } } } }