Closing InputStream for MIDI



何时应该关闭作为参数传递给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年出版。这本书给我留下了深刻的印象!

最新更新