MemoryStream.Read不会将字节复制到缓冲区 - c#

agn*_*zka 18 c# buffer memorystream image

我真的没有得到它,这让我疯狂.我有这四行:

Image img = Image.FromFile("F:\\Pulpit\\soa.bmp");
MemoryStream imageStream = new MemoryStream();
img.Save(imageStream, ImageFormat.Bmp);
byte[] contentBuffer = new byte[imageStream.Length];
imageStream.Read(contentBuffer, 0, contentBuffer.Length);
Run Code Online (Sandbox Code Playgroud)

调试时我可以看到imageStream中的字节值.在imageStream之后.我检查contentBuffer的内容,我只看到255个值.我不明白为什么会这样?在这几行中没有什么可错的!如果有人能帮助我,我将不胜感激!谢谢,agnieszka

And*_*nan 39

尝试将imageStream.Position设置为0.当您写入MemoryStream时,它会在您刚写入的字节后移动位置,所以如果您尝试读取那里没有任何内容.


Joe*_*csy 25

您需要重置文件指针.

imageStream.Seek( 0, SeekOrigin.Begin );
Run Code Online (Sandbox Code Playgroud)

否则你正在从流的末尾读取.


Ben*_*ter 13

加:

imageStream.Position = 0;
Run Code Online (Sandbox Code Playgroud)

就在之前:

imageStream.Read(contentBuffer, 0, contentBuffer.Length);
Run Code Online (Sandbox Code Playgroud)

读取指令中的0表示与存储器流中当前位置的偏移,而不是流的开始.加载流后,位置结束.您需要将其重置为开头.


Pat*_*ins 8

Image img = Image.FromFile("F:\\Pulpit\\soa.bmp");
MemoryStream imageStream = new MemoryStream();
img.Save(imageStream, ImageFormat.Bmp);
byte[] contentBuffer = new byte[imageStream.Length];
imageStream.Position = 0;//Reset the position at the start
imageStream.Read(contentBuffer, 0, contentBuffer.Length);
Run Code Online (Sandbox Code Playgroud)


小智 5

只是用

imageStream.ToArray()
Run Code Online (Sandbox Code Playgroud)

它工作而且更容易.