从BinaryReader写入MemoryStream

时间:2014-09-20 22:13:53

标签: streamreader streamwriter memorystream binaryreader binarywriter

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

写作方法:

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);
}

在阅读内容时,我可以在&#34; decodingData&#34;中看到它。 但StreamWriter似乎不会将其写入MemoryStream。

任何想法?

感谢。

1 个答案:

答案 0 :(得分:0)

我认为你在检查之前根本不会刷新/关闭流。

sw.Flush();

sw.Close();

如果完成

和 fileStream.Close();也是好的做法

编辑: 考虑到注释,您需要在反序列化之前再次尝试启动内存流 即memoryStream.Seek(0,SeekOrigin.Begin);在哪里你做到了