【发布时间】:2020-12-04 10:53:04
【问题描述】:
我正在阅读这个流行的堆栈溢出问题 Creating a byte array from a stream,并希望了解字节数组的工作原理。
在这段代码中:
byte[] buffer = new byte[16 * 1024];
using (MemoryStream ms = new MemoryStream())
{
int read;
while ((read = PictureStream.Read(buffer, 0, buffer.Length)) > 0)
{
ms.Write(buffer, 0, read);
}
return ms.ToArray();
}
以下是我不明白的地方:
我迷失了这个数组设置的大小。例如,我使用该代码块将图像流转换为字节数组,但我通常读取大于 2 兆字节的图像,这远大于图片中读取的数组的大小 - 16* 1024 字节。但是,上面的代码完全可以将图像从流转换为字节数组,不会出现“超出范围索引”错误。
那么我的数组怎么比我正在阅读的照片更小,但仍然可以完全正常地阅读呢?
【问题讨论】:
-
它以块的形式读取和写入它——它被称为流式传输。读取缓冲区满,然后写入缓冲区,然后重复,直到传输完所有数据。
-
我明白了。我将不得不阅读更多关于流媒体的内容。你如何确定字节数组的大小?为什么是 16 * 1024,而不是其他数字?
-
这有点武断——一次一个字节意味着它真的很慢,但一次 1 GB 会浪费大量内存。 16K 只是一个合理的缓冲区大小。