为什么 `WebSocket.binaryType` 存在?
Why does `WebSocket.binaryType` exist?
WebSocket
有一个 .binaryType
属性 来确定接收到的数据是公开为 Blob
还是 ArrayBuffer
。为什么? ArrayBuffer
允许您以同步方式处理数据,但是 Blob
有什么好处,为什么它是默认值?
一个 ArrayBuffer
would have to be fully read before it could be used, and all of the data would have to be in memory at the same time. In contrast, a Blob
can be read as a stream,避免了在对数据进行任何操作(或根本不进行任何操作)之前必须将所有数据都存储在内存中。
对于许多用途,您需要对流中的数据进行增量处理(例如播放音频或视频)。
出于某些目的,您确实需要所有数据才能对其进行任何操作,在这种情况下,您可能会使用 ArrayBuffer
。
至于为什么默认Blob
,我推测是因为它更灵活。当你需要增量处理时,你可以通过Blob
(使用流)获取它,而无需等待所有数据,如果你在开始之前需要所有数据,你总是可以得到一个ArrayBuffer
来自 Blob
通过它的 arrayBuffer
方法。
WebSocket
有一个 .binaryType
属性 来确定接收到的数据是公开为 Blob
还是 ArrayBuffer
。为什么? ArrayBuffer
允许您以同步方式处理数据,但是 Blob
有什么好处,为什么它是默认值?
一个 ArrayBuffer
would have to be fully read before it could be used, and all of the data would have to be in memory at the same time. In contrast, a Blob
can be read as a stream,避免了在对数据进行任何操作(或根本不进行任何操作)之前必须将所有数据都存储在内存中。
对于许多用途,您需要对流中的数据进行增量处理(例如播放音频或视频)。
出于某些目的,您确实需要所有数据才能对其进行任何操作,在这种情况下,您可能会使用 ArrayBuffer
。
至于为什么默认Blob
,我推测是因为它更灵活。当你需要增量处理时,你可以通过Blob
(使用流)获取它,而无需等待所有数据,如果你在开始之前需要所有数据,你总是可以得到一个ArrayBuffer
来自 Blob
通过它的 arrayBuffer
方法。