首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >将流转换为字符串和back...what我们是否遗漏了?

将流转换为字符串和back...what我们是否遗漏了?
EN

Stack Overflow用户
提问于 2013-07-23 12:55:58
回答 6查看 402.2K关注 0票数 191

我想将对象序列化为字符串,然后再序列化。

我们使用protobuf-net将对象转换为Stream,并成功地将其返回。

但是,Stream to string和back...不是很成功。经过StreamToStringStringToStream之后,新的Stream不会被protobuf-net反序列化;它会引发Arithmetic Operation resulted in an Overflow异常。如果我们反序列化原始流,它就能工作。

我们的方法:

代码语言:javascript
复制
public static string StreamToString(Stream stream)
{
    stream.Position = 0;
    using (StreamReader reader = new StreamReader(stream, Encoding.UTF8))
    {
        return reader.ReadToEnd();
    }
}

public static Stream StringToStream(string src)
{
    byte[] byteArray = Encoding.UTF8.GetBytes(src);
    return new MemoryStream(byteArray);
}

我们的示例代码使用了这两个:

代码语言:javascript
复制
MemoryStream stream = new MemoryStream();
Serializer.Serialize<SuperExample>(stream, test);
stream.Position = 0;
string strout = StreamToString(stream);
MemoryStream result = (MemoryStream)StringToStream(strout);
var other = Serializer.Deserialize<SuperExample>(result);
EN

回答 6

Stack Overflow用户

发布于 2013-07-23 13:03:10

我刚刚对此进行了测试,并且运行良好。

代码语言:javascript
复制
string test = "Testing 1-2-3";

// convert string to stream
byte[] byteArray = Encoding.ASCII.GetBytes(test);
MemoryStream stream = new MemoryStream(byteArray);

// convert stream to string
StreamReader reader = new StreamReader(stream);
string text = reader.ReadToEnd();

如果已经写入了stream,则在读出文本之前,您可能希望先查找开头:stream.Seek(0, SeekOrigin.Begin);

票数 263
EN

Stack Overflow用户

发布于 2016-07-06 15:37:22

UTF8 MemoryStream到字符串的转换:

代码语言:javascript
复制
var res = Encoding.UTF8.GetString(stream.GetBuffer(), 0 , (int)stream.Length)
票数 11
EN

Stack Overflow用户

发布于 2014-04-30 15:59:36

尝尝这个。

代码语言:javascript
复制
string output1 = Encoding.ASCII.GetString(byteArray, 0, byteArray.Length)
票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17801761

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档