我有数据结构我使用数据合同从服务器传递给客户端。 数据结构是
class datatransfer
{
double m_value1;
double m_value2;
double m_value3;
};
在客户端我想写入文件。
或
哪种方法最好?转换为字符串或发送数据结构并写入文件?
问题的原因:避免生成字符串。
double size是8个字节。如果我将它转换为字符串将分配的大小。
答案 0 :(得分:2)
完全取决于您如何格式化String
的{{1}}表示形式。没有预先定义的尺寸指南。
例如:
Double
请注意,大小是var myDouble = 5.183498029834092834D;
var shortString = myDouble.ToString("#.00"); // 5.18, uses 8 bytes
var longerString = myDouble.ToString("#.0000000"); // 5.1834980 18 bytes
在我的系统上为2个字节的结果。
你真正想要做的是serialization。有很多方法可以做到这一点。最简单的方法可能是使用[Serializable]
属性装饰您的班级:
Char
您需要创建成员变量[Serializable]
public class datatransfer {
double m_value1;
double m_value2;
double m_value3;
}
,或提供可公开访问的属性来设置成员变量。否则,他们将不会使用此方法序列化。
答案 1 :(得分:1)
转换为字符串时double的大小取决于数字本身和字符串的编码。
就像例如,假设ANSI编码,数字 1 将需要1个字节,数字 1.123 将需要5个字节。此外,如果您将其作为文本传输,则需要考虑使用更多字节作为分隔符(例如,使用空格,您将需要N - 1个额外字节)。您应该始终以二进制形式传输数据(如果可能,但可能取决于您拥有的连接类型和您必须使用的协议)。
作为一般规则,您应该认为二进制数据较小(然后传输速度更快),但调试起来并不容易,并且您可能遇到防火墙问题。文本数据更大,更详细,您必须在客户端验证它们(例如,您的结构,XML可能已损坏),然后传输速度较慢。最大的优点是它更容易调试,通常你可以传输文本的任何连接/协议(但不要忘记你可以传输编码为文本的二进制数据)。
所以这不是一个明确的答案,你正在使用什么样的数据传输方法/框架/协议?一个WCF服务? .NET Remoting?自定义TCP / IP连接?如果数据结构不是太大,您可能会发现二进制序列化是一个非常好的解决方案