我正在使用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