我正在使用lame软件包[1]将一些MP3数据写入文件。数据在套接字上以原始音频形式发送,并在接收到数据时写入文件流,并且每写入一个新文件10分钟。我遇到的问题是,当这种情况持续很长时间时,由于文件未关闭,系统将耗尽文件句柄。类似这样的:如何在写入完成时关闭文件?
var stream;
var encoder = lame.Encoder({
// Input
channels: 2,
bitDepth: 16,
sampleRate: 44100,
// Output
bitRate: 128,
outSampleRate: 22050,
mode: lame.STEREO // STEREO (default), JOINTSTEREO, DUALCHANNEL or MONO
});
encoder.on('data', function(data) {
stream.write(data);
});
var server = net.createServer(function(socket) {
socket.on('data', function(data) {
// There is some logic here that will based on time if it's
// time to create a new file. When creating a new file it uses
// the following code.
stream = fs.createWriteStream(filename);
// This will write data through the encoder into the file.
encoder.write(data);
// Can't close the file here since it might try to write after
// it's closed.
});
});
server.listen(port, host);
但是,如何在最后一个数据块写入后关闭文件?从技术上讲,可以打开一个新文件,而前一个文件仍然需要完成写入最后一个文件。
这种情况下,我该如何正确关闭文件?
[1] https://www.npmjs.com/package/lame
什么是 “数据”?可读流或缓冲区? – KibGzr
@KibGzr这是一个'缓冲区'。 – Luke