我查看了 Node.js Buffer 文档,但不明白Buffer.slice和Buffer.subarray之间的区别。
两者都指向“与原件相同的记忆”。
但似乎没有人不是对方的别名(似乎是当事时说的)。
测试表明行为是相同的:
> buf=Buffer.from([0,1,2,3,4,5,6])
<Buffer 00 01 02 03 04 05 06>
> bufSlice=buf.slice(1,5)
<Buffer 01 02 03 04>
> bufSub=buf.subarray(1,5)
<Buffer 01 02 03 04>
> bufSlice
<Buffer 01 02 03 04>
> bufSub
<Buffer 01 02 03 04>
> buf[3]=0xff
255
> buf
<Buffer 00 01 02 ff 04 05 06>
> bufSub
<Buffer 01 02 ff 04>
> bufSlice
<Buffer 01 02 ff 04>
Run Code Online (Sandbox Code Playgroud)
(即使 Node.js 文档中的切片示例不是很清楚)。
那么有什么区别呢?
For a NodeJS Buffer there is no difference and indeed Buffer.slice() is deprecated now so you should use Buffer.subarray().
这种弃用可能是因为 NodeJSBuffer.slice()与 JS 中的其他调用不一致slice,例如:
const t = Buffer.from([1])
t.slice()[0]=2
console.log(t[0]) // logs 2, i.e. `slice` uses same underlying memory, like `subarray` does
const t2 = [1]
t2.slice()[0]=2
console.log(t2[0]) // logs 1, unchanged! I.e. `slice` copied underlying memory
const t3 = new Uint8Array([1])
t3.slice()[0]=2
console.log(t3[0]) // logs 1, unchanged! I.e. `slice` copied underlying memory
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
7864 次 |
| 最近记录: |