fs.прочитайте API в Node.js — что делает аргумент о позиции?

#node.js

Вопрос:

Node.js в документации говорится fs.read , что требуется несколько аргументов , один из position которых «Указывает, с чего начать чтение в файле».

Однако затем в документах говорится: «Если позиция является целым числом, позиция файла останется неизменной». (документы говорят то же самое fs.readSync и отсылают читателя обратно fs.read )

Я думал, что мы объявим файл position , подобный offset аргументу для записи в выходной буфер, который принимает целое значение в байтах ( 0 чтобы начать с начала выходного буфера).

Кто — нибудь знает, как это должно работать? Я пробовал поиграть в REPL, но не смог этого понять

Ответ №1:

Потому fs.read что может быть вызван несколько раз. Таким образом, узел рассчитает position это для вас внутренне. Например, когда вы читаете текстовый файл с содержимым abcdef , код может быть таким, как показано ниже.

 const fs = require('fs')

const buffer = Buffer.alloc(1)
const fd = fs.openSync('./1.txt', 'r ')
// at begining, position is 0
let read = fs.readSync(fd, buffer)
// print a
console.log(Buffer.from(buffer,0, read).toString())
// now position is 1
read = fs.readSync(fd, buffer)
// print b, position is 2
console.log(Buffer.from(buffer,0, read).toString())
// if you specify postion : 0, positon is unchanged, it's still 2
read = fs.readSync(fd, buffer, {
    position: 0
})
// print a
console.log(Buffer.from(buffer,0, read).toString())
// continue
read = fs.readSync(fd, buffer)
// print c, position is 3
console.log(Buffer.from(buffer,0, read).toString())
 

Комментарии:

1. спасибо, означает ли это, что мы вообще не должны устанавливать position параметр? если да, то зачем приводить это в качестве аргумента?