node.js中的buffer.write方法使用说明
方法说明:
将string使用指定的encoding写入到buffer的offset处。
返回写入了多少个八进制字节。
如果Buffer没有足够的空间来适应整个string,那么将只有string的部分被写入。
语法:
buffer.write(string,[offset],[length],[encoding])
接收参数:
string String,被写入buffer的数据.
offet number,可选,默认0.数据写入到buffer的位置.
length Number,可选,默认:buffer.length–offset,要写入数据的长度
encoding String,需要使用的编码格式,可选,默认为”utf8″.
例子:
buf=newBuffer(256);
len=buf.write('\u00bd+\u00bc=\u00be',0);
console.log(len+"bytes:"+buf.toString('utf8',0,len));
源码:
Buffer.prototype.write=function(string,offset,length,encoding){
//allowwrite(string,encoding)
if(util.isString(offset)&&util.isUndefined(length)){
encoding=offset;
offset=0;
//allowwrite(string,offset[,length],encoding)
}elseif(isFinite(offset)){
offset=~~offset;
if(isFinite(length)){
length=~~length;
}else{
encoding=length;
length=undefined;
}
//XXXlegacywrite(string,encoding,offset,length)-removeinv0.13
}else{
if(!writeWarned){
if(process.throwDeprecation)
thrownewError(writeMsg);
elseif(process.traceDeprecation)
console.trace(writeMsg);
else
console.error(writeMsg);
writeWarned=true;
}
varswap=encoding;
encoding=offset;
offset=~~length;
length=swap;
}
varremaining=this.length-offset;
if(util.isUndefined(length)||length>remaining)
length=remaining;
encoding=!!encoding?(encoding+'').toLowerCase():'utf8';
if(string.length>0&&(length<0||offset<0))
thrownewRangeError('attempttowritebeyondbufferbounds');
varret;
switch(encoding){
case'hex':
ret=this.hexWrite(string,offset,length);
break;
case'utf8':
case'utf-8':
ret=this.utf8Write(string,offset,length);
break;
case'ascii':
ret=this.asciiWrite(string,offset,length);
break;
case'binary':
ret=this.binaryWrite(string,offset,length);
break;
case'base64':
//Warning:maxLengthnottakenintoaccountinbase64Write
ret=this.base64Write(string,offset,length);
break;
case'ucs2':
case'ucs-2':
case'utf16le':
case'utf-16le':
ret=this.ucs2Write(string,offset,length);
break;
default:
thrownewTypeError('Unknownencoding:'+encoding);
}
returnret;
};