数据事件中可丢失的stream丢失块中的第一个/最后一个字符

我使用ssh2-sftp客户端nodeJS来连接到sftp服务器,并获得一个文件但是我遇到了一个问题,当更多的块比一个,数据没有被正确接收,它之间丢失一个字符:
例如:sftp上的文件有'sftp文件中的一些string'
如果它被分成大块,接收到的数据将如下所示:
第一块:“一些stringf”
第二个劈:'om sftp文件'
在这个例子中,'r'丢失了

const getFile = readable => new Promise((resolve, reject) => { let file = ''; readable.on('data', (chunk) => { file += chunk; }); readable.on('end', () => resolve(file)); readable.on('error', reject); }); const readable = await sftp.get(fileName, false); 

sftp.get()返回NodeJS.ReadableStream

有人遇到同样的问题吗?

将数据块存储为数组,然后将它们连接到一个缓冲区并在最后得到string值是更明智的做法:

 const fs = require('fs'); const getFile = readable => new Promise((resolve, reject) => { const file = []; readable.on('data', chunk => file.push(Buffer.from(chunk, 'base64'))); readable.on('end', () => resolve(Buffer.concat(file).toString())); readable.on('error', reject); }); const readable = fs.createReadStream('package.json'); getFile(readable).then(file => console.log('file', file)); 

在本地运行它并按预期获取我的文件的内容。

经过长时间的研究,我发现在模块sftp-stream中,为了读取streamhighWaterMark的问题被设置为64 * 1024,而且如果一个块有64 * 1024个咬合,那么一个咬合就会丢失。 而我刚刚设置水印到64 * 1204-1。