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);
}
///
/// 現在のストリームから指定した配列に4バイト符号なし整数を読み取り、ストリームの現在位置を指定した配列のバイト数だけ進めます。
///
/// データを読み取るバッファ
public void Read(UInt32[] buffer)
{
for (int i = 0; i < buffer.Length; i++)
{
Read(ref buffer[i]);
}
}
}
}