如何将MemoryStream写入byte[]?

68

可能重复:
从流中创建字节数组

我想在内存中创建文本文件并将其写入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;
}

但由于数据长度的原因,它无法正常工作。


3
类型为MemoryStream的对象具有属性"ToArray()"。在那里,您可以获取byte[]数组。 - Tomtom
1
这个能帮到你吗?https://dev59.com/J3VC5IYBdhLWcg3wpjB8 - Kaf
2
@yan.kun 当时关闭的原始帖子只有第一行。他后来添加了更多信息,但出于某种原因,又发布了这个重复的帖子。 - J. Steen
4个回答

177

怎么样:

byte[] bytes = fs.ToArray();

5
请尝试以下代码:

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

3
请注意,使用 using 而不是 Flush 更加安全。此外,需要编写一些不太常见的代码才能在 Dispose 后访问 MemoryStream - 需要在 using (ms) 之前创建 MemoryStream... - Alexei Levenkov

3
byte[] ObjectToByteArray(Object obj)
{
    using (MemoryStream ms = new MemoryStream())
    {
        BinaryFormatter b = new BinaryFormatter();
        b.Serialize(ms, obj);
        return ms.ToArray();
    }
}

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接