0

我正在按照 IPFS github示例保存到 IPFS:

'use strict'

const IPFS = require('ipfs')
const all = require('it-all')

async function main () {
  const node = await IPFS.create()
  const version = await node.version()

  console.log('Version:', version.version)

  for await (const file of await node.add({
    path: 'hello.txt',
    content: Buffer.from('Hello World 101')   //<<<=== why Buffer before assigned to content?
  })) {
    console.log('Added file:', file.path, file.cid.toString())

    const data = Buffer.concat(await all(node.cat(file.cid)))

    console.log('Added file contents:', data.toString())
  }
}

main()

Buffer我注意到字符串在保存之前被转换为二进制。有人可以解释一下这里的用法Buffer吗?保存图像或视频文件怎么样?

4

1 回答 1

1

默认情况下,Node.js 使用可以作为流的 API 的缓冲区,如果您使用 JavaScript 中的字符串,这些可以在 unicode (utf-8) 中工作,并且这些可以与二进制数据(例如,图像,视频文件, ETC)。

区分字符串与缓冲区的一个简单示例是比较 UTF-8 字符串的大小,作为 unicode 文本(按字符计数)和缓冲区(按字节计数):

> const str = 'Hello 世界';
undefined
> str.length
8
> const buf = Buffer.from(str, 'utf8');
undefined
> buf.length
12
> buf.toString('hex');
'48656c6c6f7720e4b896e7958c'
> buf.toString('utf8');
'Hello 世界'

总而言之,这是一个标准的工作,使用带有 FS、Socket 等 API 的缓冲区。

于 2020-02-26T21:24:59.423 回答