如何将 MemoryStream 写入字节 [] [重复]

Posted

技术标签:

【中文标题】如何将 MemoryStream 写入字节 [] [重复]【英文标题】:How can I write MemoryStream to byte[] [duplicate] 【发布时间】:2013-01-04 18:32:56 【问题描述】:

可能重复:Creating a byte array from a stream

我正在尝试在内存中创建文本文件并将其写入byte[]。我该怎么做?

public byte[] GetBytes()

    MemoryStream fs = new MemoryStream();
    TextWriter tx = new StreamWriter(fs);

    tx.WriteLine("1111");
    tx.WriteLine("2222");
    tx.WriteLine("3333");

    tx.Flush();
    fs.Flush();

    byte[] bytes = new byte[fs.Length];
    fs.Read(bytes,0,fs.Length);

    return bytes;

但由于数据长度问题,它不起作用

【问题讨论】:

MemoryStream 类型的对象具有属性“ToArray()”。在那里你得到字节[] 这对您有帮助吗***.com/questions/221925/… ? @yan.kun 关闭的原件在关闭时只有第一行。此后,他添加了更多信息,并且出于某种原因发布了此副本。 【参考方案1】:

怎么样:

byte[] bytes = fs.ToArray();

【讨论】:

【参考方案2】:
byte[] ObjectToByteArray(Object obj)

    using (MemoryStream ms = new MemoryStream())
    
        BinaryFormatter b = new BinaryFormatter();
        b.Serialize(ms, obj);
        return ms.ToArray();
    

【讨论】:

【参考方案3】:

试试下面的代码:

public byte[] GetBytes()

MemoryStream fs = new MemoryStream();
TextWriter tx = new StreamWriter(fs);

tx.WriteLine("1111");
tx.WriteLine("2222");
tx.WriteLine("3333");

tx.Flush();
fs.Flush();
byte[] bytes = fs.ToArray();
return bytes;

【讨论】:

+1。请注意,使用using 而不是Flush 更安全。还需要一些不寻常的代码才能在 Dispose 之后访问 MemoryStream - 需要在 using (ms) 之前创建 MemoryStream ...【参考方案4】:
    public byte[] GetBytes()
    
        MemoryStream fs = new MemoryStream();
        TextWriter tx = new StreamWriter(fs);

        tx.WriteLine("1111");
        tx.WriteLine("2222");
        tx.WriteLine("3333");

        tx.Flush();
        fs.Flush();

        fs.Position = 0;

        byte[] bytes = new byte[fs.Length];
        fs.Read(bytes, 0, bytes.Length);

        return bytes;
    

【讨论】:

以上是关于如何将 MemoryStream 写入字节 [] [重复]的主要内容,如果未能解决你的问题,请参考以下文章

使用 StreamWriter 写入 MemoryStream 返回空

不同的线程访问 MemoryStream

独立项目-MemoryStream-内存数据读写-01

如何将字节数组转换为图像文件?

记录来自 NAudio WaveIn 的输入,并将输出保存到字节数组

Image与byte[]数组的相互转换