何时应该关闭作为参数传递给MIDI Sequencer的InputStream
?当Sequencer.close()
被调用时,它会自动关闭吗?或者我应该在输入流被读入序列器后关闭它吗?
public MidiSound(InputStream in) throws MidiUnavailableException,
IOException, InvalidMidiDataException {
sequencer = MidiSystem.getSequencer();
synth = MidiSystem.getSynthesizer();
receiver = MidiSystem.getReceiver();
sequencer.open();
synth.open();
sequencer.getTransmitter().setReceiver(receiver);
sequencer.setSequence(in);
//in.close()?
}
一个InputStream
(几乎所有的I/O)需要关闭。
如果你使用Java 7,你可以使用新的"try-with-resources"语法。
。
try (AudioInputStream ais = AudioSystem.getAudioInputStream(url))
{
//audio handling here
}
使用这种语法,就不需要在finally
块中显式地关闭新定义的AudioInputStream
。Java运行时将自动执行此操作。此语法可用于实现AutoCloseable
接口的任何I/O类型。
我两个星期前才知道这件事。我正在阅读Poornachandra Sarang的《Java编程——从Java专家那里学习高级技能》,Oracle出版社2012年出版。这本书给我留下了深刻的印象!