NodeJS Buffer.write () возвращает 0 при записи в индекс> = 100 000 - PullRequest
0 голосов
/ 22 апреля 2020
main.js
        global.buff = Buffer.alloc(100010)
        global.index = 0

buffer.js
        bytes_written = global.buff.write(data, global.buff_idx)
        global.buff_idx += bytes_written

В nodeJS Buffer.write () обычно возвращает количество байтов, которые были записаны в буфер. Когда я пытаюсь записать в любой индекс> = 100 000, он возвращает 0. Я прочитал, что максимальный размер буфера составляет 1 ГБ (32-разрядный) и 2 ГБ (64-разрядный), поэтому я не думаю, что это будет проблемой.

В журнале написано:

index before: 95142  offset: 1605  index after: 96747
index before: 96747  offset: 2195  index after: 98942
index before: 98942  offset: 1058  index after: 100000
index before: 100000 offset: 0     index after: 100000
index before: 100000 offset: 0     index after: 100000

1 Ответ

0 голосов
/ 22 апреля 2020

У меня есть проект, который использует 15 МБ буферов, поэтому 100,010 байт вообще не проблема.

Я пишу это как ответ, просто чтобы показать вам код, который я написал, и этот код при полном запуске само по себе работает просто отлично:

global.buff_idx = 0;
global.buff = Buffer.alloc(100010);

let data = "12345";

let bytes_written = global.buff.write(data, global.buff_idx);
global.buff_idx += bytes_written;
console.log(bytes_written);

Он регистрирует 5, что вы ожидаете.

Чтобы мы могли помочь вам в дальнейшем, вам нужно будет опубликовать Minimal , Воспроизводимый пример .


К вашему сведению, я также попробовал этот же код разделить на два файла, как вы показываете. Нет разницы. Есть что-то еще, что вызывает проблему в вашей среде, кроме кода, который вы показываете.


И еще один момент:

Все это глобальное использование буфера является мерзостью в node.js. Инкапсулируйте общий буфер в модуль и просто попросите каждый файл, который хочет использовать общий буфер, импортировать ваш буферный модуль, чтобы получить доступ к общему буферу. Вот как вы должны кодировать в node.js, а не использовать глобальные переменные, подобные этой.

...