string longMessage = "";//The string to convert to bytes
for (int i = 0; i < 999; i++)//Adding 999 chars
{
longMessage += "i";
}
byte[] buffer = new byte[1024];//Array of bytes to store the message
Stream stream = new MemoryStream(buffer);
BinaryFormatter formatter = new BinaryFormatter();
formatter.Serialize(stream, longMessage);
为什么在字符串中放入超过999个字符时出现错误,而不是在1024个字符之后?我收到以下错误:
NotSupportedException:无法展开此MemoryStream
错误:如果没有这种类型的信息,它就不会知道它应该反序列化的实际类型。
答案 0 :(得分:1)
因为BinaryFormatter
除了实际数据外还会发出类型信息。这意味着还有其他字节表示您正在存储字符串。在您正在使用的.NET框架版本中(因为BinaryFormatter不可移植)显然这种类型信息占用25个字节。
如果没有这种类型的信息,它就不会知道它应该反序列化的实际类型。
所以基本上你可以让它占用二进制序列化所需的字节数:
using (MemoryStream stream = new MemoryStream())
{
BinaryFormatter formatter = new BinaryFormatter();
formatter.Serialize(stream, longMessage);
byte[] actualData = stream.ToArray();
}
答案 1 :(得分:1)
字符串本身有一个编码 - 它不仅仅是一个1字节字符的数组。它包含有关该字符串以及如何读取它的其他信息(ASCII,Unicode,UTF等)。
您可以使用以下命令使用ASCII编码从输入字符串中获取1024字节数组:
string longMessage = "";//The string to convert to bytes
for (int i = 0; i < 1024; i++)//Adding 1024 chars
{
longMessage += "i";
}
byte[] buffer = Encoding.ASCII.GetBytes(longMessage);