我正在阅读dds纹理,但是一旦构建了jar,我无法通过url
和file
访问这些纹理,而是必须使用InputStream
。
所以我需要知道如何从java.nio.ByteBuffer
获取java.io.InputStream
。
Ps:无论通过第三方库,我只需要它工作
答案 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);
答案 2 :(得分:1)
内容:
ReadableByteChannel channel = Channels.newChannel(inputStream);
ByteBuffer buffer = ByteBuffer.allocate(bufferSize);
while (channel.read(buffer) != -1) {
//write buffer
};