如何完全加载音频但稍后播放?

How to completely load audio but play it later?

所以,我有一个 AudioInputStream,它从 FileInputStream 读取。我想关闭 FileInputStream 这将关闭 AudioInputStream.

有什么方法可以完全加载音频,这样我就不必直接从文件中流式传输它了吗?

您可以将其存储在 Java Clip.

示例:

Clip clip = AudioSystem.getClip();
clip.open(/*your AudioInputStream*/);

将 clip 设为一个字段,以备后用。

如果你想要一个 AudioInputStream,你可以将整个文件加载到一个字节数组中:

static AudioInputStream load(File file) throws IOException {
    try (FileInputStream in = new FileInputStream(file)) {
        ByteArrayOutputStream bytes = new ByteArrayOutputStream();

        byte[] buf = new byte[4096];
        for (int b; (b = in.read(buf)) > -1;) {
            bytes.write(buf, 0, b);
        }

        return AudioSystem.getAudioInputStream(
            new ByteArrayInputStream(bytes.toByteArray());
    }
}

或在Java 7:

static AudioInputStream load(File file) throws IOException {
    return AudioSystem.getAudioInputStream(
        new ByteArrayInputStream(Files.readAllBytes(file.toPath()));
}