Java InputStream to ByteBuffer

2022-09-01 08:42:58

我正在阅读dds纹理,但是由于一旦构建了jar,我就无法访问这些纹理,并且必须使用。urlfileInputStream

所以我需要知道如何从.java.​nio.ByteBufferjava.io.InputStream

Ps:无论通过第三部分库,我只需要它工作


答案 1

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

该类型具有一个静态方法,用于读取 和 返回 .IOUtilsInputStreambyte[]

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

在内部,这将创建 一个并将字节复制到输出,然后调用 。ByteArrayOutputStreamtoByteArray()

更新:只要您有,正如@Peter指向的那样,您必须转换为byte arrayByteBuffer

ByteBuffer.wrap(bytes)

JAVA 9 UPDATE:如@saka1029所述,如果您使用的是java 9 +,则可以使用默认API,该API现在包括InputStream::readAllBytes函数,因此不需要外部库InputStream

InputStream is;
byte[] bytes = is.readAllBytes()

答案 2

一个整洁的解决方案,不需要第三方库

ByteBuffer byteBuffer = ByteBuffer.allocate(inputStream.available());
Channels.newChannel(inputStream).read(byteBuffer);

请参阅可读字节通道#read(字节缓冲器)


推荐