/// <summary>
/// 将Dataset序列化成byte[]
/// </summary>
/// <param name="ds"></param>
/// <returns></returns>
public static byte[] DataToByte(DataSet ds)
{
byte[] bArrayResult = null;
ds.RemotingFormat = SerializationFormat.Binary;
MemoryStream ms = new MemoryStream();
IFormatter bf = new BinaryFormatter();
bf.Serialize(ms, ds);
bArrayResult = ms.ToArray();
ms.Close();
ms.Dispose();
return bArrayResult;
}
客户端:
/// <summary>
/// 将byte[]反序列化成Dataset
/// </summary>
/// <param name="bArrayResult"></param>
/// <returns></returns>
public static DataSet ByteToDataset(byte[] bArrayResult)
{
DataSet dsResult = null;
MemoryStream ms = new MemoryStream(bArrayResult);
IFormatter bf = new BinaryFormatter();
object obj = bf.Deserialize(ms);
dsResult = (DataSet)obj;
ms.Close();
ms.Dispose();
return dsResult;
}
========================================================================
问题:请问有过经验的大哥,这种方法能提高多少传输效率吗?
还有对象数组怎么转换成byte[]?
TKS!
13 个解决方案
#1
序列化对象的方法:
public static byte[] Serialize(object aObject)
{
//序列化发送内容
MemoryStream aMemoryStream = new MemoryStream();
BinaryFormatter aBinaryFormatter = new BinaryFormatter();
aBinaryFormatter.Serialize(aMemoryStream, aObject);
return aMemoryStream.ToArray();
}
另外,你这样并不能提高太多的传输效率
无线网络如果掉包率很高,应该从传输协议的角度来注重考虑
public static byte[] Serialize(object aObject)
{
//序列化发送内容
MemoryStream aMemoryStream = new MemoryStream();
BinaryFormatter aBinaryFormatter = new BinaryFormatter();
aBinaryFormatter.Serialize(aMemoryStream, aObject);
return aMemoryStream.ToArray();
}
另外,你这样并不能提高太多的传输效率
无线网络如果掉包率很高,应该从传输协议的角度来注重考虑
#2
如果要提高传输效率怎么做呢?能否在压缩下
#3
怎么没有人呢?
#4
可以壓縮的。
#region 壓縮,解壓
public static byte[] SerializationDataset(DataSet dsDataSet)//對數據集進行序列化並壓縮
{
dsDataSet.RemotingFormat = SerializationFormat.Binary;
MemoryStream MS = new MemoryStream();
IFormatter BF = new BinaryFormatter();
MS.Position = 0;
C1ZStreamWriter CZ = new C1ZStreamWriter(MS);
BF.Serialize(CZ, dsDataSet);
Byte[] B = MS.ToArray();
return B;
}
public static DataSet DecompressDS(byte[] byt)//對數據集進行解壓縮並反序列化
{
DataSet DS = new DataSet();
MemoryStream ms = new MemoryStream(byt);
C1ZStreamReader CR = new C1ZStreamReader(ms);
IFormatter BF = new BinaryFormatter();
object OB = BF.Deserialize(CR);
DS = (DataSet)OB;
return DS;
}
#endregion
#region 壓縮,解壓
public static byte[] SerializationDataset(DataSet dsDataSet)//對數據集進行序列化並壓縮
{
dsDataSet.RemotingFormat = SerializationFormat.Binary;
MemoryStream MS = new MemoryStream();
IFormatter BF = new BinaryFormatter();
MS.Position = 0;
C1ZStreamWriter CZ = new C1ZStreamWriter(MS);
BF.Serialize(CZ, dsDataSet);
Byte[] B = MS.ToArray();
return B;
}
public static DataSet DecompressDS(byte[] byt)//對數據集進行解壓縮並反序列化
{
DataSet DS = new DataSet();
MemoryStream ms = new MemoryStream(byt);
C1ZStreamReader CR = new C1ZStreamReader(ms);
IFormatter BF = new BinaryFormatter();
object OB = BF.Deserialize(CR);
DS = (DataSet)OB;
return DS;
}
#endregion
#5
using C1.C1Zip;
#6
还有一个问题,对象数组怎么转换成byte[]呢?
#7
dataset ds = new dataset();
byte[] byte = (byte[])ds.table[0];
byte[] byte = (byte[])ds.table[0];
#8
是对象数组,不是byte[]
比如:Class1[] c=new Class1[3];
怎么把转换为byte[]?
比如:Class1[] c=new Class1[3];
怎么把转换为byte[]?
#9
对象数组 可以放在一个LIST里,就可以作为一个对象进行压缩了
//如果要提高传输效率怎么做呢?
看你用什么协议,一般的HTTP和TCP协议网络中间断线后,就需要重新传输
如果使用支持断点续传的方式就比较好
对于一般的数据而言(数据包小而数量很多)如果你不是专门搞网络传输的就没有必要了
//如果要提高传输效率怎么做呢?
看你用什么协议,一般的HTTP和TCP协议网络中间断线后,就需要重新传输
如果使用支持断点续传的方式就比较好
对于一般的数据而言(数据包小而数量很多)如果你不是专门搞网络传输的就没有必要了
#10
mark
#11
可以壓縮的。
#region 壓縮,解壓
public static byte[] SerializationDataset(DataSet dsDataSet)//對數據集進行序列化並壓縮
{
dsDataSet.RemotingFormat = SerializationFormat.Binary;
MemoryStream MS = new MemoryStream();
IFormatter BF = new BinaryFormatter();
MS.Position = 0;
C1ZStreamWriter CZ = new C1ZStreamWriter(MS);
BF.Serialize(CZ, dsDataSet);
Byte[] B = MS.ToArray();
return B;
}
public static DataSet DecompressDS(byte[] byt)//對數據集進行解壓縮並反序列化
{
DataSet DS = new DataSet();
MemoryStream ms = new MemoryStream(byt);
C1ZStreamReader CR = new C1ZStreamReader(ms);
IFormatter BF = new BinaryFormatter();
object OB = BF.Deserialize(CR);
DS = (DataSet)OB;
return DS;
}
#endregion
哪里是解压和压缩的代码?
#region 壓縮,解壓
public static byte[] SerializationDataset(DataSet dsDataSet)//對數據集進行序列化並壓縮
{
dsDataSet.RemotingFormat = SerializationFormat.Binary;
MemoryStream MS = new MemoryStream();
IFormatter BF = new BinaryFormatter();
MS.Position = 0;
C1ZStreamWriter CZ = new C1ZStreamWriter(MS);
BF.Serialize(CZ, dsDataSet);
Byte[] B = MS.ToArray();
return B;
}
public static DataSet DecompressDS(byte[] byt)//對數據集進行解壓縮並反序列化
{
DataSet DS = new DataSet();
MemoryStream ms = new MemoryStream(byt);
C1ZStreamReader CR = new C1ZStreamReader(ms);
IFormatter BF = new BinaryFormatter();
object OB = BF.Deserialize(CR);
DS = (DataSet)OB;
return DS;
}
#endregion
哪里是解压和压缩的代码?
#12
换千兆网卡,百兆千兆网卡就是在底层对数据压缩才提速的。也就是说你没必要压缩了
#13
up
#1
序列化对象的方法:
public static byte[] Serialize(object aObject)
{
//序列化发送内容
MemoryStream aMemoryStream = new MemoryStream();
BinaryFormatter aBinaryFormatter = new BinaryFormatter();
aBinaryFormatter.Serialize(aMemoryStream, aObject);
return aMemoryStream.ToArray();
}
另外,你这样并不能提高太多的传输效率
无线网络如果掉包率很高,应该从传输协议的角度来注重考虑
public static byte[] Serialize(object aObject)
{
//序列化发送内容
MemoryStream aMemoryStream = new MemoryStream();
BinaryFormatter aBinaryFormatter = new BinaryFormatter();
aBinaryFormatter.Serialize(aMemoryStream, aObject);
return aMemoryStream.ToArray();
}
另外,你这样并不能提高太多的传输效率
无线网络如果掉包率很高,应该从传输协议的角度来注重考虑
#2
如果要提高传输效率怎么做呢?能否在压缩下
#3
怎么没有人呢?
#4
可以壓縮的。
#region 壓縮,解壓
public static byte[] SerializationDataset(DataSet dsDataSet)//對數據集進行序列化並壓縮
{
dsDataSet.RemotingFormat = SerializationFormat.Binary;
MemoryStream MS = new MemoryStream();
IFormatter BF = new BinaryFormatter();
MS.Position = 0;
C1ZStreamWriter CZ = new C1ZStreamWriter(MS);
BF.Serialize(CZ, dsDataSet);
Byte[] B = MS.ToArray();
return B;
}
public static DataSet DecompressDS(byte[] byt)//對數據集進行解壓縮並反序列化
{
DataSet DS = new DataSet();
MemoryStream ms = new MemoryStream(byt);
C1ZStreamReader CR = new C1ZStreamReader(ms);
IFormatter BF = new BinaryFormatter();
object OB = BF.Deserialize(CR);
DS = (DataSet)OB;
return DS;
}
#endregion
#region 壓縮,解壓
public static byte[] SerializationDataset(DataSet dsDataSet)//對數據集進行序列化並壓縮
{
dsDataSet.RemotingFormat = SerializationFormat.Binary;
MemoryStream MS = new MemoryStream();
IFormatter BF = new BinaryFormatter();
MS.Position = 0;
C1ZStreamWriter CZ = new C1ZStreamWriter(MS);
BF.Serialize(CZ, dsDataSet);
Byte[] B = MS.ToArray();
return B;
}
public static DataSet DecompressDS(byte[] byt)//對數據集進行解壓縮並反序列化
{
DataSet DS = new DataSet();
MemoryStream ms = new MemoryStream(byt);
C1ZStreamReader CR = new C1ZStreamReader(ms);
IFormatter BF = new BinaryFormatter();
object OB = BF.Deserialize(CR);
DS = (DataSet)OB;
return DS;
}
#endregion
#5
using C1.C1Zip;
#6
还有一个问题,对象数组怎么转换成byte[]呢?
#7
dataset ds = new dataset();
byte[] byte = (byte[])ds.table[0];
byte[] byte = (byte[])ds.table[0];
#8
是对象数组,不是byte[]
比如:Class1[] c=new Class1[3];
怎么把转换为byte[]?
比如:Class1[] c=new Class1[3];
怎么把转换为byte[]?
#9
对象数组 可以放在一个LIST里,就可以作为一个对象进行压缩了
//如果要提高传输效率怎么做呢?
看你用什么协议,一般的HTTP和TCP协议网络中间断线后,就需要重新传输
如果使用支持断点续传的方式就比较好
对于一般的数据而言(数据包小而数量很多)如果你不是专门搞网络传输的就没有必要了
//如果要提高传输效率怎么做呢?
看你用什么协议,一般的HTTP和TCP协议网络中间断线后,就需要重新传输
如果使用支持断点续传的方式就比较好
对于一般的数据而言(数据包小而数量很多)如果你不是专门搞网络传输的就没有必要了
#10
mark
#11
可以壓縮的。
#region 壓縮,解壓
public static byte[] SerializationDataset(DataSet dsDataSet)//對數據集進行序列化並壓縮
{
dsDataSet.RemotingFormat = SerializationFormat.Binary;
MemoryStream MS = new MemoryStream();
IFormatter BF = new BinaryFormatter();
MS.Position = 0;
C1ZStreamWriter CZ = new C1ZStreamWriter(MS);
BF.Serialize(CZ, dsDataSet);
Byte[] B = MS.ToArray();
return B;
}
public static DataSet DecompressDS(byte[] byt)//對數據集進行解壓縮並反序列化
{
DataSet DS = new DataSet();
MemoryStream ms = new MemoryStream(byt);
C1ZStreamReader CR = new C1ZStreamReader(ms);
IFormatter BF = new BinaryFormatter();
object OB = BF.Deserialize(CR);
DS = (DataSet)OB;
return DS;
}
#endregion
哪里是解压和压缩的代码?
#region 壓縮,解壓
public static byte[] SerializationDataset(DataSet dsDataSet)//對數據集進行序列化並壓縮
{
dsDataSet.RemotingFormat = SerializationFormat.Binary;
MemoryStream MS = new MemoryStream();
IFormatter BF = new BinaryFormatter();
MS.Position = 0;
C1ZStreamWriter CZ = new C1ZStreamWriter(MS);
BF.Serialize(CZ, dsDataSet);
Byte[] B = MS.ToArray();
return B;
}
public static DataSet DecompressDS(byte[] byt)//對數據集進行解壓縮並反序列化
{
DataSet DS = new DataSet();
MemoryStream ms = new MemoryStream(byt);
C1ZStreamReader CR = new C1ZStreamReader(ms);
IFormatter BF = new BinaryFormatter();
object OB = BF.Deserialize(CR);
DS = (DataSet)OB;
return DS;
}
#endregion
哪里是解压和压缩的代码?
#12
换千兆网卡,百兆千兆网卡就是在底层对数据压缩才提速的。也就是说你没必要压缩了
#13
up