Java 中 InputStream 转 ByteBuffer
问题
我在读 dds textures,但一旦创建为 jar 之后我就不能通过 url 和 file 来访问这些 textures 了,并且必须使用 InputStream 来代替。
所以我想知道怎么从 java.io.InputStream 获得一个 java.nio.ByteBuffer。
PS:不管是不是通过第三方库,我只需要它能运行并达到预期效果。
答案
在这种情况下对我来说最好的就是使用 Apache commons-io 处理这种和类似的任务。
IOUtils 工具有一个静态方法来读取一个 InputStream,并且返回一个 byte[]。
InputStream is = something;
byte[] bytes = IOUtils.toByteArray(is);
它在内部创建了一个 ByteArrayOutputStream,拷贝 bytes 到 output,然后调用 toByteArray()。
更新:只要你获得了 byte 数组,就像 @Peter 说的,你可以把它转化成 ByteBuffer 了。
ByteBuffer byteBuffer = ByteBuffer.wrap(bytes)
译注:扩展
如果不想用 IOUtils 来读取字节流的话,我们可以直接使用 JDK 功能。
ByteBuffer bb = null;
InputStream is = something;
try
{
// 读取字节流
byte[] bytes = new byte[is.available()];
is.read(bytes);
// 包装为ByteBuffer
bb = ByteBuffer.wrap(bytes);
}
catch (IOException e)
{
LOGGER.error(e.getMessage());
}
翻译整理自: http://stackoverflow.com/questions/30026060/java-inputstream-to-bytebuffer