0

什么时候应该关闭InputStream作为参数传递给 MIDI 音序器的一个?它在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()?
}
4

1 回答 1

0

一个InputStream(几乎所有的 I/O)需要关闭。

如果您使用 Java 7,则可以使用新的“try-with-resources”语法。

例如,

try (AudioInputStream ais = AudioSystem.getAudioInputStream(url))
{   
    //audio handling here
}

使用此语法,无需显式关闭块中新定义AudioInputStream的内容finally。Java 运行时会自动完成。此语法可用于任何实现该AutoCloseable接口的 I/O 类型。

我两周前才知道这件事。我正在阅读甲骨文出版社 2012 年出版的 Poornachandra Sarang 所著的“Java 编程——向 Java 专家学习高级技能”。这本书给我留下了深刻的印象!

于 2013-05-09T22:31:25.740 回答