Javascript-форум (https://javascript.ru/forum/)
-   Node.JS (https://javascript.ru/forum/node-js-io-js/)
-   -   Синхронное чтение файла readSync (https://javascript.ru/forum/node-js-io-js/61478-sinkhronnoe-chtenie-fajjla-readsync.html)

Перевозчик 20.02.2016 04:01

Синхронное чтение файла readSync
 
При попытке синхронного чтения построчно данные считываются неточно(при асинхронном чтении все нормально).
Примерный код
fs=require('fs');
var op=fs.openSync("new.txt","r+",777);
var pos=0; var line=[];
var rl=fs.readSync(op,100,pos);
line.push(rl[0]);
pos=pos+rl[1];
rl=fs.readSync(op,100,pos);
.....

 fs.closeSync(op);


Суть проблемы: текст латинскими буквами считывается корректно всегда.
Текст кириллицей считывается корректно когда скачиваешь файл в одну строку (Одна операция к примеру -readSync(op,10000,0)).
При порционном чтении многострочного кириллического текста или (смешанного) возникают отдельные кракозябры в кириллическом тексте как раз в районе стыка "порций"-как я понимаю.
Это баг или что то неверно делаю?

Перевозчик 20.02.2016 17:15

Решение найдено - естественно надо все делать через буфер - иначе правильно склеить мультибайтные символы не получается
Код примерно такой (для порционного чтения без разбивки на строчки):
var buf=new Buffer(400,"utf8"); 
var op=fs.openSync("new.txt","r+",777);
var stripBom=require('strip-bom');

var rl=fs.readSync(op,buf,0,20,0);
var ofs=rl;
while (rl==20){
rl=fs.readSync(op,buf,ofs,20);
ofs+=rl;
}
var result=stripBom(buf.toString("utf8",0,ofs));


Часовой пояс GMT +3, время: 12:45.