gpt4 book ai didi

Java 文件和 ByteArray 或 InputStream

转载 作者:太空宇宙 更新时间:2023-11-04 08:54:16 25 4
gpt4 key购买 nike

我想使用 jFugue 在小程序中播放一些 MIDI 音乐。有一个用于 MIDI 模式的类 - Pattern - 加载模式的唯一方法是从文件中加载。现在,我不知道小程序如何加载文件以及不加载文件,但我正在使用一个框架(PulpCore),它使加载资源成为一项简单的任务。如果我需要从 ZIP 目录中获取 Assets ,我可以使用提供 get()getAsStream() 方法的 Assets 类。 get()ByteArray 形式返回给定资源,另一个以 InputStream 形式返回。

我需要 jFugue 从 ByteArrayInputStream 加载模式。在伪代码中,我想这样做:

Pattern.load(new File(Assets.get("mymidifile.midi")));

但是,没有使用 ByteArray 的 File 构造函数。请给点建议?

最佳答案

确实,jFugue 不允许加载除文件之外的任何内容,这很遗憾,因为没有什么可以阻止使用任何其他类型的流:

public static final String TITLE = "Title";

public static Pattern loadPattern(File file) throws IOException {
InputStream in = new FileInputStream(file);
try {
return loadPattern(in);
} finally {
in.close();
}
}

public static Pattern loadPattern(URL url) throws IOException {
InputStream in = url.openStream();
try {
return loadPattern(in);
} finally {
in.close();
}
}

public static Pattern loadPattern(InputStream in) throws IOException {
return loadPattern(new InputStreamReader(in, "UTF-8")); // or ISO-8859-1 ?
}

public static Pattern loadPattern(Reader reader) throws IOException {
if (reader instanceof BufferedReader) {
return loadPattern(reader);
} else {
return loadPattern(new BufferedReader(reader));
}
}

public static Pattern loadPattern(BufferedReader bread) throws IOException {
StringBuffer buffy = new StringBuffer();

Pattern pattern = new Pattern();
while (bread.ready()) {
String s = bread.readLine();
if ((s != null) && (s.length() > 1)) {
if (s.charAt(0) != '#') {
buffy.append(" ");
buffy.append(s);
} else {
String key = s.substring(1, s.indexOf(':')).trim();
String value = s.substring(s.indexOf(':')+1, s.length()).trim();
if (key.equalsIgnoreCase(TITLE)) {
pattern.setTitle(value);
} else {
pattern.setProperty(key, value);
}
}
}
}
return pattern;
}

更新(针对 loadMidi)

public static Pattern loadMidi(InputStream in) throws IOException, InvalidMidiDataException
{
MidiParser parser = new MidiParser();
MusicStringRenderer renderer = new MusicStringRenderer();
parser.addParserListener(renderer);
parser.parse(MidiSystem.getSequence(in));
Pattern pattern = new Pattern(renderer.getPattern().getMusicString());
return pattern;
}

public static Pattern loadMidi(URL url) throws IOException, InvalidMidiDataException
{
MidiParser parser = new MidiParser();
MusicStringRenderer renderer = new MusicStringRenderer();
parser.addParserListener(renderer);
parser.parse(MidiSystem.getSequence(url));
Pattern pattern = new Pattern(renderer.getPattern().getMusicString());
return pattern;
}

关于Java 文件和 ByteArray 或 InputStream,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2704151/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com