/** * バイナリログの画像ID情報を読み込む */ private MemIconImages ReadLogImagesBin(UFileStream fs) { MemIconImages _images = new MemIconImages(); // 件数取得 int size = fs.GetInt32(); for (int i = 0; i < size; i++) { // 1件分のログを取得 MemIconImage image = new MemIconImage(); // 名前 image.Name = fs.GetSizeString(); // 画像 int imageSize = fs.GetInt32(); if (imageSize > 0) { byte[] byteImage = fs.GetBytes(imageSize); image.SetByteImage(byteImage); } _images.Add(image); } return(_images); }
/** * バイナリログのログID情報を読み込む * */ private LogIDs ReadLogIDsBin(UFileStream fs) { LogIDs _logIds = new LogIDs(); // 件数取得 int size = fs.GetInt32(); for (int i = 0; i < size; i++) { // 1件分のログを取得 LogID logId = new LogID(); // ID logId.ID = fs.GetUInt32(); // 名前 logId.Name = fs.GetSizeString(); // 色 logId.Color = fs.GetUInt32(); // アイコン画像名 // 画像はアイコン画像を読み込んでから設定する logId.ImageName = fs.GetSizeString(); _logIds.Add(logId); } return(_logIds); }
/** * バイナリログのレーン情報を読み込む * @input fs: 読み込み元のファイル */ private Lanes ReadLogLanesBin(UFileStream fs) { Lanes _lanes = new Lanes(); // 件数取得 int size = fs.GetInt32(); for (int i = 0; i < size; i++) { // 1件分のログを取得 Lane lane = new Lane(); // ID lane.ID = fs.GetUInt32(); // 名前 lane.Name = fs.GetSizeString(); // 色 lane.Color = fs.GetUInt32(); _lanes.Add(lane); } return(_lanes); }
/** * 本体部分をバイナリ形式で書き込む */ public void WriteBodyBin() { // 追加 using (UFileStream fs = new UFileStream(logFilePath, FileMode.Append, FileAccess.Write)) { // ログ件数 fs.WriteInt32(GetLogNum()); for (int i = 0; i < blockMax; i++) { LogBlock block = blocks[writeBufferNo, i]; if (block != null) { for (int j = 0; j < blockSize; j++) { if (block.logs[j] != null) { block.logs[j].WriteToBinFile(fs, Encoding.UTF8); } } } } } }
/** * バイナリ形式のログファイルに書き込む */ public void WriteToBinFile(UFileStream fs) { fs.WriteInt32(logIDs.Count); foreach (LogID logID in logIDs) { fs.WriteBytes(logID.ToBinary()); } }
/** * バイナリ形式のログファイルに書き込む * * @input fs: 書き込み先のファイルオブジェクト */ public void WriteToBinFile(UFileStream fs) { fs.WriteInt32(images.Count); foreach (IconImage image in images) { fs.WriteBytes(image.ToBinary()); } }
/** * バイナリ形式のログファイルに書き込む */ public void WriteToBinFile(UFileStream fs) { fs.WriteInt32(lanes.Count); foreach (Lane lane in lanes) { fs.WriteBytes(lane.ToBinary()); } }
/** * バイナリ形式のログファイルにログを出力する * * @input fs: 書き込み先のファイルオブジェクト * @input encoding: 文字列を出力する場合のエンコードタイプ */ public override void WriteToBinFile(UFileStream fs, Encoding encoding) { // ID fs.WriteUInt32(id); // Name fs.WriteSizeString(name, encoding); // Color fs.WriteUInt32(color); }
/** * バイナリ形式のログファイルにログを出力する * * @output fs: 書き込み先のファイルオブジェクト * @output encoding: 文字列のエンコードタイプ */ public override void WriteToBinFile(UFileStream fs, Encoding encoding) { // Type of log (Area) fs.WriteByte((byte)LogType.Area); // Length of area name // Area name fs.WriteSizeString(name, encoding); // parent area name fs.WriteSizeString(parentName, encoding); // color fs.WriteUInt32(color); }
/** * バイナリエリアデータを読み込む */ private void ReadLogAreaBin(UFileStream fs) { LogArea area = new LogArea(); // エリア名の長さ // エリア名 area.Name = fs.GetSizeString(); // 親のエリア名の長さ // 親のエリア名 area.ParentArea = areaManager.searchArea(fs.GetSizeString()); // 色 area.Color = fs.GetUInt32(); // エリアを追加 areaManager.AddArea(area); }
/** * バイナリ形式のログをファイルに書き込む * * @input fs : 書き込み先のファイルオブジェクト * @input encoding : 文字列のエンコードタイプ */ public override void WriteToBinFile(UFileStream fs, Encoding encoding) { // 名前 fs.WriteSizeString(name, encoding); // 画像データ // 指定の画像ファイルをメモリに展開し書き込む try { // 画像ファイルから画像のbyte配列を取得する if (imagePath != null && File.Exists(imagePath)) { fs.WriteSizeBytes(File.ReadAllBytes(imagePath)); } } catch (Exception e) { Console.WriteLine(e.Message); } }
/** * ULoggerで作成したログファイルを読み込んでULogViewで使用できる種類のデータとしてメモリ展開する * * @input inputFilePath: ログファイルのパス * @input fileType: ログファイルの種類(テキスト、バイナリ) * @output : true:成功 / false:失敗 */ public bool ReadLogFile(string inputFilePath) { // 先頭の4バイトの文字列でテキストかバイナリかを判定する string identStr = null; using (var fs = new UFileStream(inputFilePath, FileMode.Open, FileAccess.Read)) { identStr = fs.GetString(4); } if (identStr.Equals(IdentText)) { ReadLogFileText(inputFilePath); } else { ReadLogFileBin(inputFilePath); } areaManager.Print(); return(true); }
/** * バイナリ形式のヘッダーを書き込む */ public void WriteHeaderBin() { // 新規 using (UFileStream fs = new UFileStream(logFilePath, FileMode.Create, FileAccess.Write)) { // ファイルの種別 fs.WriteString(IdentBin); // エンコードの長さ // エンコード fs.WriteSizeString(UUtility.GetEncodingStr(encoding), Encoding.UTF8); // ID情報 logIDs.WriteToBinFile(fs); // レーン情報 lanes.WriteToBinFile(fs); // Icon image images.WriteToBinFile(fs); } }
} // GetEncoding() #endregion #region Binary /** * バイナリ形式のログファイルを読み込んでメモリに展開する * @input inputFilePath: ログファイルのパス * @output : true:成功 / false:失敗 */ private bool ReadLogFileBin(string inputFilePath) { using (var fs = new UFileStream(inputFilePath, FileMode.Open, FileAccess.Read)) { try { // データ判定部分をスキップ fs.GetBytes(4); // Header ReadLogHeadBin(fs); // Body ReadLogBodyBin(fs); } catch (Exception e) { Console.WriteLine("Error ReadLogFileBin " + e.Message); throw; } } return(true); }
/** * バイナリログのヘッダ部分を取得 * @input fs : ファイルオブジェクト * */ private void ReadLogHeadBin(UFileStream fs) { // 文字コードを取得 string encStr = fs.GetSizeString(); this.encoding = UUtility.GetEncodingFromStr(encStr); fs.EncodingType = encoding; // ログID情報 logIDs = ReadLogIDsBin(fs); // レーン情報 lanes = ReadLogLanesBin(fs); // アイコン画像 images = ReadLogImagesBin(fs); // ログIDの画像を設定する foreach (LogID logId in logIDs) { logId.Image = images.GetImage(logId.ImageName); } }
/** * バイナリ形式のログをファイルに書き込む * * @input fs : 書き込み先のファイルオブジェクト * @input encoding: 文字列のエンコードタイプ */ public override void WriteToBinFile(UFileStream fs, Encoding encoding) { // ID fs.WriteUInt32(id); // ID名 fs.WriteSizeString(name, encoding); // 色 fs.WriteUInt32(color); // アイコン画像名の長さ // アイコン画像名 if (imageName == null) { // 長さ:0 = なし fs.WriteUInt32((UInt32)0); } else { fs.WriteSizeString(imageName, encoding); } }
/** * バイナリログの本体部分を取得 * @input fs : ファイルオブジェクト */ private void ReadLogBodyBin(UFileStream fs) { while (!fs.EndOfStream()) { // 件数取得 int logNum = fs.GetInt32(); for (int i = 0; i < logNum; i++) { // 種類を取得 LogType type = (LogType)fs.GetByte(); if (type == LogType.Data) { ReadLogDataBin(fs); } else { ReadLogAreaBin(fs); } } } }
/** * バイナリ形式のログファイルにログを出力する * * @output fs: 書き込み先のファイルオブジェクト * @output encoding: 文字列のエンコードタイプ */ public override void WriteToBinFile(UFileStream fs, Encoding encoding) { // データログ fs.WriteByte((byte)LogType.Data); // ログID fs.WriteUInt32(logId); // ログタイプ fs.WriteByte((byte)logType); // 表示レーンID fs.WriteUInt32(laneId); if (text == null) { //タイトルの長さ fs.WriteUInt32((UInt32)0); } else { //タイトル fs.WriteSizeString(text, encoding); } //時間 fs.WriteDouble(time); if (detail == null) { // ログデータ(詳細)の種類 fs.WriteByte((byte)DetailDataType.None); } else { // ログデータ(詳細)の種類 fs.WriteByte(detail.dataTypeByte()); // ログデータ(詳細) fs.WriteSizeString(detail.ToString(), encoding); } }
// Write log to binary file public abstract void WriteToBinFile(UFileStream fs, Encoding encoding);
/** * バイナリログデータを読み込む */ private void ReadLogDataBin(UFileStream fs) { LogData log = new LogData(); // ログID log.ID = fs.GetUInt32(); //ログタイプ bool isRangeEnd = false; LogDataType dataType = (LogDataType)fs.GetByte(); switch (dataType) { case LogDataType.Single: log.Type = MemLogType.Point; break; case LogDataType.RangeStart: log.Type = MemLogType.Range; break; case LogDataType.RangeEnd: // 同じレーンの Range タイプのログに結合する // todo isRangeEnd = true; break; case LogDataType.Value: log.Type = MemLogType.Value; break; } //表示レーンID log.LaneId = fs.GetUInt32(); //タイトルの長さ //タイトル log.Text = fs.GetSizeString(); // 範囲ログの終了タイプの場合、結合する //時間 Double time = fs.GetDouble(); if (log.Type == MemLogType.Range && isRangeEnd == true) { // 1つ前の Rangeタイプの Time2 に時間を設定 // todo return; } else { log.Time1 = time; } //ログデータ(詳細)のサイズ //ログデータ(詳細) if (log.Detail != null) { log.Detail = MemDetailData.Deserialize(fs.GetSizeString()); } // ログを追加する areaManager.AddLogData(log); }