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