Buenas tardes el codigo es el siguiente:
using System;
using System.Net;
using System.IO;
using System.Text;
using System.Globalization;
using System.Data;
using System.Collections;
using System.Collections.Generic;
using System.Runtime.Serialization;
using System.Runtime.Serialization.Formatters;
using System.Runtime.Serialization.Formatters.Binary;
using System.Xml;
using System.Data.OleDb;
using FastSerializer;
namespace SerializaHash
{
[Serializable]public class campos : ISerializable
{
public String clave;
public List<int> posiciones = new List<int>();
//Default constructor
public campos()
{
clave = "";
posiciones = null;
}
//Deserialization constructor.
public campos(SerializationInfo info, StreamingContext ctxt)
{
SerializationReader sr = SerializationReader.GetReader(info);
clave = sr.ReadString();
posiciones = (List<int>)sr.ReadList<int>();
}
//Serialization function.
public void GetObjectData(SerializationInfo info, StreamingContext ctxt)
{
SerializationWriter sw = SerializationWriter.GetWriter();
sw.Write(clave);
sw.Write<int>(posiciones);
}
}
class Program
{
static void Main(string[] args)
{
FileStream fs = new FileStream("D:\\Ernesto\\Tesis\\Columnas\\id_Uno.P ersonas.txt", FileMode.Open, FileAccess.Read);
//FileStream prueba = new FileStream("D:\\Ernesto\\Tesis\\prueba.txt", FileMode.OpenOrCreate, FileAccess.Write);
Hashtable a = new Hashtable();
Hashtable b = new Hashtable();
try
{
System.Console.WriteLine("Leyendo Archivo en formato actual " + DateTime.Now);
BinaryFormatter bf = new BinaryFormatter();
a = (Hashtable)bf.Deserialize(fs);
System.Console.WriteLine("Fin Lectura Formato actual " + DateTime.Now);
IFormatter formatter = new BinaryFormatter();
int contador = 0;
int arch = 0;
List<campos> listaCamp = new List<campos>();
//Serializacion
System.Console.WriteLine("Inicio de Serializacion nueva " + DateTime.Now);
foreach (DictionaryEntry key in a)
{
campos camp = new campos();
camp.clave = key.Key.ToString();
camp.posiciones = (List<int>)key.Value;
contador++;
listaCamp.Add(camp);
if (contador == 12500)
{
arch++;
Stream stream = new FileStream("D:\\Ernesto\\Pruebas\\prueba" + arch + ".txt", FileMode.OpenOrCreate, FileAccess.Write);
formatter.Serialize(stream, listaCamp);
stream.Close();
contador = 0;
listaCamp.Clear();
}
}
System.Console.WriteLine("Fin Serializacion Nueva " + DateTime.Now);
BinaryFormatter bs = new BinaryFormatter();
//Deserializacion
System.Console.WriteLine("Inicio Deserializacion Nueva " + DateTime.Now);
for (int i = 1; i < 400; i++)
{
Stream stream1 = new FileStream("D:\\Ernesto\\Pruebas\\prueba" + i + ".txt", FileMode.Open, FileAccess.Read);
List<campos> lista = new List<campos>();
lista = (List<campos>)bs.Deserialize(stream1);
for (int j = 0; j < lista.Count; j++)
{
String clavecita = lista[j].clave;
List<int> pos = new List<int>();
pos = (List<int>)lista[j].posiciones;
b.Add(clavecita,pos);
}
System.Console.WriteLine("Archivo # " + i + " " + DateTime.Now);
}
System.Console.WriteLine("Fin Deserializacion Nueva " + DateTime.Now);
// stream.Close();
}
finally
{
fs.Close();
}
}
}
}
En seguida les adjunto el codigo de fast serializer que se encuentra en la pagina de Code Projects