Java 中 InputStream 转 ByteBuffer

问题

我在读 dds textures,但一旦创建为 jar 之后我就不能通过 urlfile 来访问这些 textures 了,并且必须使用 InputStream 来代替。

所以我想知道怎么从 java.io.InputStream 获得一个 java.nio.ByteBuffer

PS:不管是不是通过第三方库,我只需要它能运行并达到预期效果。

答案

在这种情况下对我来说最好的就是使用 Apache commons-io 处理这种和类似的任务。

IOUtils 工具有一个静态方法来读取一个 InputStream,并且返回一个 byte[]

InputStream is = something;
byte[] bytes = IOUtils.toByteArray(is);

它在内部创建了一个 ByteArrayOutputStream,拷贝 bytesoutput,然后调用 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

如果觉得这对你有用,请随意赞赏,给与作者支持
评论 0
最新评论