Использование буфера перед сохранением в IPFS - PullRequest
0 голосов
/ 26 февраля 2020

Я следую примеру 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 здесь? Как насчет сохранения изображения или видео файла?

1 Ответ

1 голос
/ 27 февраля 2020

По умолчанию Node.js работает с буферами, где используются API, которые могут быть потоками, если вы работаете со строками в JavaScript, они работают в Unicode (utf-8), и они могут работать с двоичными данными (например, изображение, видеофайл и т. д. c).

Простым примером разностных строк из буферов может быть сравнение размера строки UTF-8 в виде текста в кодировке Юникод (подсчет по символу) и буфера (подсчет byte):

> 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 世界'

Таким образом, это стандартная работа с буферами с такими API, как FS, Socket и др. c.

...