Java 文件和 ByteArray 或 InputStream
我想使用 jFugue 在小程序中播放一些 MIDI 音乐。有一个用于 MIDI 模式的类 - Pattern
- 加载模式的唯一方法是从文件中加载。现在,我不知道小程序如何加载文件以及不加载文件,但我正在使用一个框架(PulpCore),它使加载资源成为一项简单的任务。如果我需要从 ZIP 目录中获取资产,我可以使用提供 get()
和 getAsStream()
方法的 Assets
类。 get()
以 ByteArray
形式返回给定资源,另一个以 InputStream
形式返回。
我需要 jFugue 从 ByteArray
或 InputStream
加载模式。 在伪代码中,我想这样做:
Pattern.load(new File(Assets.get("mymidifile.midi")));
但是没有需要 ByteArray 的 File 构造函数。请提出建议?
I want to use jFugue to play some MIDI music in an applet. There's a class for the MIDI pattern - Pattern
- and the only method to load the pattern is from a File. Now, I don't know how applets load files and what not, but I am using a framework (PulpCore) that makes loading assets a simple task. If I need to grab an asset from a ZIP catalogue, I can use the Assets
class which provides get()
and getAsStream()
methods. get()
returns the given asset as a ByteArray
, the other as an InputStream
.
I need jFugue to load the pattern from either ByteArray
or InputStream
.
In pseudo-code, I would like to do this:
Pattern.load(new File(Assets.get("mymidifile.midi")));
However there is no File constructor that would take a ByteArray. Suggestions, please?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(5)
如果我没记错的话,模式文件包含纯文本。使用 getAsStream() 加载文件,然后使用
其中 yourStream 是 getAsStream() 返回的 InputStream 将其转换为字符串。然后使用 add(String...patterns) 方法加载模式:
If I am not wrong, the Pattern files contain plain text. Load the file using getAsStream(), then convert it into a string using
Where yourStream is the InputStream returned by getAsStream(). Then use the add(String... patterns) method to load the pattern:
您可以使用以下代码(取自
Pattern.loadPattern()
方法的实现):You can use this code (taken from the implementation of the
Pattern.loadPattern()
method):您可以读取字节数组并将其转换为字符串。
问题将出在输入流上。有一个 StringBufferInputStream,但它已被弃用,取而代之的是 StringReader。
You could read the byte array and turn it into a String.
The problem will be the InputStream. There's a StringBufferInputStream, but it's deprecated in favor of StringReader.
您不想使用
File
,您想使用java.io.ByteArrayInputStream
You don't want to use
File
, you want to usejava.io.ByteArrayInputStream
确实,jFugue 不允许加载除文件之外的任何内容,这是一种耻辱,因为没有什么可以阻止使用任何其他类型的流:
更新(对于 loadMidi)
It's true that jFugue doesn't allow to load anything but a file, which is a shame because nothing prevents from using any other kind of stream:
UPDATE (for loadMidi)