lor*_*isi 6 binary encoding node.js
我正在尝试使用 fs 读取二进制文件createReadStream。假设我们知道“误解”binary和latin1作为该encoding选项的值,并且默认toString情况下在data块上使用将使用utf-8,我尝试以这种方式使用 aBuffer和缓冲区连接作为.concat函数:
var readStream = fs.createReadStream( graphPath );
var data;
readStream.on('data', (chunk) => {
var b = new Buffer (chunk.length);
if(!data) data = new Buffer (chunk.length);
else data = Buffer.concat([data, b]);
})
readStream.on('end', () => {
console.log( "type is", typeof (data ) );
console.log("read graph %d",data.length);data.buffer);
});
Run Code Online (Sandbox Code Playgroud)
以便将新块附加到数据中。这样中的typeof对象data是object,但它的编码似乎仍然不是二进制格式(即application/octet-stream charset=binary在内容类型方面不清楚。)
如果我只是做data+=chunk输出类型将是string.
如果来自文件的数据已经'binary'编码,则将编码设置readStream为'binary'usingsetEncoding()并将所有块连接到单个字符串中并返回。 setEncoding()支持在 Node per Buffer 文档中为编码实现的任何编码。
const getBinary = (graphPath, asBuffer = false, cb) => {
let readStream = fs.createReadStream(graphPath)
let data = ''
// set stream encoding to binary so chunks are kept in binary
readStream.setEncoding('binary')
readStream.once('error', err => {
return cb(err)
})
readStream.on('data', chunk => (data += chunk))
readStream.on('end', () => {
// If you need the binary data as a Buffer
// create one from data chunks
return cb(null, asBuffer ? Buffer.from(data, 'binary') : data)
})
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
10945 次 |
| 最近记录: |