Java InputStream到ByteBuffer

时间:2015-05-04 08:48:03

标签: java inputstream bytebuffer

我正在阅读dds纹理,但是一旦构建了jar,我无法通过urlfile访问这些纹理,而是必须使用InputStream

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

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

3 个答案:

答案 0 :(得分:30)

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

IOUtils类型有静态方法来阅读InputStream并返回byte[]

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

在内部创建ByteArrayOutputStream并将字节复制到输出,然后调用toByteArray()

更新:只要您有byte array@Peter指出,就必须转换为ByteBuffer

ByteBuffer.wrap(bytes)

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

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

答案 1 :(得分:2)

不需要第 3 方库的简洁解决方案是

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

ReadableByteChannel#read(ByteBuffer)

答案 2 :(得分:1)

内容:

ReadableByteChannel channel = Channels.newChannel(inputStream);
ByteBuffer buffer = ByteBuffer.allocate(bufferSize);

while (channel.read(buffer) != -1) {
  //write buffer

};