WebService传输DataSet压缩与解压缩
/// <summary> /// 压缩 /// </summary> public static class ZipClass { /// <summary> /// 序列化转化为二进制数组 /// </summary> /// <param name="DS"></param> /// <returns></returns> public byte[] GetDataSetSurrogateBYtes(DataSet DS) { DataSetSurrogate dss = new DataSetSurrogate(DS); ///二进制方式方式序列化 BinaryFormatter ser = new BinaryFormatter(); MemoryStream ms = new MemoryStream(); ser.Serialize(ms, dss); byte[] buffer = ms.ToArray(); return buffer; } ///序列化转化为二进制数组并压缩 public byte[] GetDataSetSurrogateZipBYtes(DataSet DS) { DataSetSurrogate dss = new DataSetSurrogate(DS); ///二进制方式方式序列化 BinaryFormatter ser = new BinaryFormatter(); MemoryStream ms = new MemoryStream(); ser.Serialize(ms, dss); byte[] buffer = ms.ToArray(); ///调用压缩方法 byte[] Zipbuffer = Compress(buffer); return Zipbuffer; } ///压缩二进制文件 private byte[] Compress(byte[] data) { MemoryStream ms = new MemoryStream(); Stream zipStream = null; zipStream = new GZipStream(ms, CompressionMode.Compress, true); ///从指定的字节数组中将压缩的字节写入基础流 zipStream.Write(data, 0, data.Length); zipStream.Close(); ms.Position = 0; byte[] Compressed_Data = new byte[ms.Length]; ms.Read(Compressed_Data, 0, int.Parse(ms.Length.ToString())); return Compressed_Data; } } /// <summary> /// 解压 /// </summary> public static class UnZipClass { /// <summary> /// 解压二进制文件 /// </summary> /// <param name="data"></param> /// <returns></returns> public static byte[] Decompress(byte[] data) { try { MemoryStream ms = new MemoryStream(data); Stream zipStream = null; zipStream = new GZipStream(ms, CompressionMode.Decompress); byte[] dc_data = null; dc_data = ExtractBytesFromStream(zipStream, data.Length); return dc_data; } catch { return null; } } private static byte[] ExtractBytesFromStream(Stream zipStream, int dataBlock) { byte[] data = null; int totalBytesRead = 0; try { while (true) { Array.Resize(ref data, totalBytesRead + dataBlock + 1); int bytesRead = zipStream.Read(data, totalBytesRead, dataBlock); if (bytesRead == 0) { break; } totalBytesRead += bytesRead; } Array.Resize(ref data, totalBytesRead); return data; } catch { return null; } } /// <summary> /// 将二进制文件反序列化后转化为DataSet /// </summary> /// <param name="ZipByte"></param> /// <returns></returns> public static DataSet GetDatasetFromByte(byte[] ZipByte) { byte[] buffer = UnZipClass.Decompress(ZipByte); BinaryFormatter ser = new BinaryFormatter(); DataSetSurrogate dss; dss = (DataSetSurrogate)ser.Deserialize(new MemoryStream(buffer)); DataSet DS = dss.ConvertToDataSet(); return DS; } }