【问题标题】:Writing to MemoryStream from BinaryReader从 BinaryReader 写入 MemoryStream
【发布时间】:2014-09-20 22:13:53
【问题描述】:

我在尝试将保存的列表从二进制文件读回列表时遇到问题。 文件是加密的,没有加密我没问题。

写法:

private void WriteEncodedFile(FileStream fileStream, MemoryStream memoryStream)
{
    StreamReader sr = new StreamReader(memoryStream);
    BinaryWriter bw = new BinaryWriter(fileStream);
    memoryStream.Seek(0, SeekOrigin.Begin);
    string data = sr.ReadToEnd();
    var bytes = Encoding.UTF8.GetBytes(data);
    for (int i = 0; i < bytes.Length; i++) bytes[i] ^= 0x5a;
    bw.Write(Convert.ToBase64String(bytes));
    bw.Close();
    fileStream.Close();
}

阅读方法:

private void ReadEncodedFile(FileStream fileStream, MemoryStream memoryStream)
{
    BinaryReader br = new BinaryReader(fileStream);
    StreamWriter sw = new StreamWriter(memoryStream);
    fileStream.Seek(0, SeekOrigin.Begin);
    memoryStream.Seek(0, SeekOrigin.Begin);

    string base64 = br.ReadString();
    byte[] bytes = Convert.FromBase64String(base64);
    for (int i = 0; i < bytes.Length; i++) bytes[i] ^= 0x5a;
    string decodedData = Encoding.UTF8.GetString(bytes);
    sw.Write(decodedData);
}

阅读内容时,我可以在“decodedData”中看到它。 但是 StreamWriter 似乎没有将其写入 MemoryStream。

有什么想法吗?

谢谢。

【问题讨论】:

    标签: streamreader streamwriter memorystream binaryreader binarywriter


    【解决方案1】:

    我认为您根本没有在检查之前刷新/关闭流。

    sw.Flush();
    

    sw.Close();
    

    如果完成

    和 文件流。关闭();也有好的做法

    编辑: 考虑到评论,您需要在反序列化之前再次寻找内存流的开始 即 memoryStream.Seek(0, SeekOrigin.Begin);无论你在哪里做

    【讨论】:

    • 添加 sw.Flush 时收到以下错误:System.Runtime.Serialization.SerializationException:在解析完成之前遇到流结束。在反序列化器上:dataList = (List)bFormatter.Deserialize(ms);
    猜你喜欢
    • 2013-12-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多