use*_*125 5 html javascript browser media-source
让我们从一个例子开始:
对我来说,这似乎没有多大意义。Blob URL 应该代表永远不会改变的不可变数据块。但 MSE 似乎能够使它们代表一个可变的内存缓冲区。
这在幕后是如何工作的?如果我们还想让 blob URL 代表一些可变的内存缓冲区,我们如何使用 javascript 自己做到这一点?
您需要了解 BlobURI不代表任何数据。它们只是链接,指向内存中的某些资源,就像字符串本身/sf/ask/3822978071/不包含您正在阅读的任何内容一样,它只是指向随后将生成页面的服务器指令。
他们的链接可以说是不可变的,一旦你使用 生成它URL.createObjectURL(target),你就不能改变它target,就像你使用const关键字一样。
举例来说,const foo = {}现在foo不能设置为除此对象之外的其他对象。但地址指向的对象foo仍然是可变的。foo.bar = 'baz'还是可以做的。
const foo = {};
try{
foo = 'fails';
}
catch(e) {
console.error(e);
}
foo.mutable = true;
console.log(foo);Run Code Online (Sandbox Code Playgroud)
对于 blobURI 来说也是一样的。blobURI 指向一个target对象,该链接无法更改,但target仍然是可变的。对于 MediaSource 对象如此,对于其他对象也是如此。
如果您还记得几年前,我们仍然能够对 MediaStreams 使用 blobURI(这是一个坏主意),这是相同的过程,blobURI 以不可变的方式指向 MediaStream 对象,但是 media-数据不断变化(流)。
即使对于文件,您也可以拥有一个指向硬盘驱动器上的文件的 blobURI,这不会阻止您从 HDD 中删除它,即使 blobURI 现在不再指向任何地方。
与此相关的一个特殊情况是 Blob 的情况,它是从内存中的数据生成的(即不仅仅是指向磁盘上文件的指针)。这里 Blob 保存的数据是不可变的,因此在这种情况下,blobURI 确实指向一个保存不可变数据的对象。
对于您请求有一个指向内存中存储的某些数据的 blobURI,但仍然能够修改此数据,这是无法完成的...
这是因为这种情况意味着您使用以下方法从 Blob 对象创建了 blobURI内存中的数据,它再次将数据保持在不可变状态。
| 归档时间: |
|
| 查看次数: |
2345 次 |
| 最近记录: |