ele*_*ect 23 java bytebuffer inputstream
我读DDS纹理,但由于一次建成罐子我无法通过访问这些纹理url和file并有能力使用InputStream来代替.
所以我需要知道如何java.?nio.ByteBuffer从一个人那里获得一个java.io.InputStream.
Ps:无论通过第三方库,我只需要它工作
Jor*_*lla 37
对我来说,在这种情况下最好的是Apache commons-io来处理这个和类似的任务.
该IOUtils类型有一个静态方法来读取InputStream和返回a byte[].
InputStream is;
byte[] bytes = IOUtils.toByteArray(is);
Run Code Online (Sandbox Code Playgroud)
在内部,这会创建一个ByteArrayOutputStream并将字节复制到输出,然后调用toByteArray().
更新:只要你有byte array,如@Peter指出,你必须转换为ByteBuffer
ByteBuffer.wrap(bytes)
Run Code Online (Sandbox Code Playgroud)
JAVA 9更新:正如@ saka1029所述,如果您使用的是java 9+,您可以使用InputStream现在包含InputStream::readAllBytes函数的默认API ,因此不需要外部库
InputStream is;
byte[] bytes = is.readAllBytes()
Run Code Online (Sandbox Code Playgroud)
小智 5
什么意思:
ReadableByteChannel channel = Channels.newChannel(inputStream);
ByteBuffer buffer = ByteBuffer.allocate(bufferSize);
while (channel.read(buffer) != -1) {
//write buffer
};
Run Code Online (Sandbox Code Playgroud)