#javascript #node.js
#javascript #node.js
Вопрос:
Вот как я вызываю fs.read, но я постоянно получаю сообщение об ошибке. Что-то не так с моим синтаксисом?
Ошибка в командной строке: «ErrorCode»: -1,
var fs = IMPORTS.require('fs'),
sys = IMPORTS.require("sys")
var file= this.filename,
start= parseInt(offsetStart),
end= parseInt(offsetEnd);
bufSize = 64 * 1024;
fs.open(file,'r',0666,function(err,fd) {
fs.read(fd,bufSize,0,end,start,function(err,str,count) {
result = { reply:str,
reply2:count
};}); });
Ответ №1:
Это может помочь, если вы объясните, что вы здесь делаете. Почему вы открываете файл и что вы пытаетесь прочитать из него?
Если это текстовый файл, возможно, проще использовать поток чтения, что-то вроде этого:
inp = fs.createReadStream('sample.txt');
inp.setEncoding('utf8');
inptext = '';
inp.on('data', function (data) {
inptext = data;
});
inp.on('end', function (close) {
console.log(inptext);
});
Возможно, вам захочется взглянуть на свой код и спросить себя, куда деваются данные в вашем операторе return . Если вы действительно хотите использовать цепочку обратного вызова, вы можете попробовать передать пустой объект, а затем заполнить его данными, чтобы вам не приходилось беспокоиться об отправке данных обратно по цепочке обратного вызова.
Комментарии:
1. Привет, спасибо за ответ. Я считываю изображение (обложку альбома) из файла mp3. Поэтому я смещаю start и end, которые являются начальным и конечным местоположением img в двоичном файле. Размер очищенных данных может достигать 100 кб, и я использую кодировку base64.
2. Я попробовал fs.createReadStream, но независимо от того, какой начальный, конечный или буферный параметр я установил, он никогда не считывает данных объемом более 57 тыс. итак, я получаю частичное изображение.
Ответ №2:
если вы ожидаете до 100 кб, а буфер равен 64 кб, а изображение смещено, может ли это означать получение первых 57 КБ чего-то, начинающегося примерно с 7 кб?
Что произойдет, если размер буфера равен 256 * 1024?
Могут ли значения offsetStart и offsetEnd отображаться или сбрасываться? Кажется, их стоит знать.
Кроме того, действительно ли второе значение является смещением или это длина?
Комментарии:
1. Привет, Билл, второе значение действительно является
length
значением. Например, при чтении я получил следующие цифры: начало: 78889, конец: 138310.2. Ах, и если бы вы думали, что это start и stop, вы бы получили ‘length’ = 60K … не правильный 138310! Что произойдет, если вы измените код, чтобы он соответствовал, и расширите буфер?
3. Я только что попробовал 256 * 1024, но по-прежнему отображается только треть изображения. Мне интересно, есть ли ошибка в этой версии node v0.2.3. которую я обязан использовать, поскольку она является частью api, встроенного в мобильную платформу, которую я разрабатываю для WebOS.
4. Хм, вот облом. Та же часть изображения, что и в 64 * 1024? 256 не имело никакого значения? Есть причины не пробовать 4086 * 1024? 16 * 1024? Просто чтобы посмотреть, есть ли какая-либо чувствительность. Как насчет простого 4194304? Если 4X с 64 по 256 ничего не изменили, вероятно, проблема не в этом буфере. Это всегда может быть ошибка в библиотеке. Можете ли вы предоставить ему файл изображения примерно того же размера, который он, по-видимому, читает? Я собираюсь поискать другие примеры fs.createReadStream … и .js больших файлов в целом.
5. Вы видели публикацию «Каковы плюсы и минусы fs.createReadStream против fs.ReadFile в node.js ?» Авторы согласны с тем, что fs.ReadFile загрузит весь файл в память целиком, в то время как as fs.createReadStream будет считывать файл частями указанного вами размера.