public byte[] ToBytes() { CarregarListaVideos(); List <byte> dados = new List <byte>(); unsafe { Byte[] resultado = new Byte[sizeof(FormatoPlaylist) - sizeof(UInt32)]; fixed(byte *pSrc = resultado) { FormatoPlaylist *listaArquivos = (FormatoPlaylist *)pSrc; //paths.CopyTo(resultado, sizeof(FormatoPlaylist)); listaArquivos->versao = this.versao; listaArquivos->qtdArquivos = this.qtdArquivos; for (int i = 0; i < this.formato.Count(); i++) { listaArquivos->formato[i] = this.formato[i]; } dados.AddRange(resultado); foreach (IVideo video in listaVideos) { if (video is VideoV01) { dados.AddRange((video as VideoV01).ToBytes()); } else if (video is VideoV02) { dados.AddRange((video as VideoV02).ToBytes()); } else if (video is VideoV04) { dados.AddRange((video as VideoV04).ToBytes()); } } listaArquivos->Tamanho = (UInt32)dados.Count; resultado = dados.ToArray(); BitConverter.GetBytes((UInt32)resultado.Length).CopyTo(resultado, 0); } return(resultado); } }
public void LoadFromBytes(byte[] dados) { unsafe { fixed(byte *pSrc = dados) { FormatoPlaylist *listaArquivos = (FormatoPlaylist *)pSrc; Byte[] temporario = new byte[listaArquivos->qtdArquivos]; listaArquivos->Tamanho = (UInt32)dados.Length; this.versao = listaArquivos->versao; this.qtdArquivos = listaArquivos->qtdArquivos; // Limpa a lista this.listaVideos.Clear(); int indice = sizeof(FormatoPlaylist) - sizeof(UInt32); for (int i = 0; i < this.qtdArquivos; i++) { int indiceInicial = indice; // Pegar o tamanho do Arquivo uint tamanhoArquivo = BitConverter.ToUInt32(dados, indice); byte[] dadosVideo = new byte[tamanhoArquivo]; // Atualiza o indice com o tamanho do arquivo indice += sizeof(uint); // Pular a versão indice++; Array.Copy(dados, indiceInicial, dadosVideo, 0, tamanhoArquivo); // Pegar o formato do Arquivo Ex.: V02 if (Encoding.ASCII.GetString(dados, indice, 3).ToUpper().Equals("V01")) { // Instancia o video a partir do formato VideoV01 video = new VideoV01(); // Carrega através do ARRAY video.LoadFromBytes(dadosVideo); // Adiciona o video listaVideos.Add(video); } else if (Encoding.ASCII.GetString(dados, indice, 3).ToUpper().Equals("V02")) { // Instancia o video a partir do formato VideoV02 video = new VideoV02(); // Carrega através do ARRAY video.LoadFromBytes(dadosVideo); // Adiciona o video listaVideos.Add(video); } else if (Encoding.ASCII.GetString(dados, indice, 3).ToUpper().Equals("V04")) { // Instancia o video a partir do formato VideoV04 video = new VideoV04(); // Carrega através do ARRAY video.LoadFromBytes(dadosVideo); // Adiciona o video listaVideos.Add(video); } indice = indice + dadosVideo.Length; indice = indice - sizeof(uint); indice = indice - 1; } } } }