ctr_test_tools/TwlBkpCheck/Windows/TWLBackupBlock/ExtBinaryReader.cs
n2460 f26671db85 TwlBkpCheck/Windows:ヘッダ情報の更新(今までのは Legacy としてクラス分け)
git-svn-id: file:///Volumes/Transfer/gigaleak_20231201/2020-09-30%20-%20paladin.7z/paladin/ctr_test_tools@27 6b0af911-cb57-b745-895f-eec5701120e1
2011-10-19 08:51:52 +00:00

151 lines
5.5 KiB
C#

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