Java中如何将InputStream转Byte Array或ByteBuffer呢?
下文笔者讲述java中InputStream转(Byte Array或ByteBuffer)的方法分享,如下所示
原生java方式
实现思路: 方式1:使用java原生代码,借助你们的构造函数进行相应的转换 方式2:借助Guava框架 方式3:使用Commons IO例:
原生java方式
@Test public void testa() throws IOException { InputStream initialStream = new ByteArrayInputStream(new byte[] { 0, 1, 2 }); byte[] targetArray = new byte[initialStream.available()]; initialStream.read(targetArray); } 对于应缓冲流,我们无法知道其底层数据确切大小,实现需更加灵活: @Test public void testb() throws IOException { InputStream is = new ByteArrayInputStream(new byte[] { 0, 1, 2 }); ByteArrayOutputStream buffer = new ByteArrayOutputStream(); int nRead; byte[] data = new byte[1024]; while ((nRead = is.read(data, 0, data.length)) != -1) { buffer.write(data, 0, nRead); } buffer.flush(); byte[] byteArray = buffer.toByteArray(); }
使用Guava实现
@Test public void testc() throws IOException { InputStream initialStream = ByteSource.wrap(new byte[] { 0, 1, 2 }).openStream(); byte[] targetArray = ByteStreams.toByteArray(initialStream); }
使用Commons IO
使用Commons IO提供的IOUtils工具类@Test public void testd() throws IOException { ByteArrayInputStream initialStream = new ByteArrayInputStream(new byte[] { 0, 1, 2 }); byte[] targetArray = IOUtils.toByteArray(initialStream); } IOUtils.toByteArray() 方法内部缓存输入流 不再需要使用BufferedInputStream实例
版权声明
本文仅代表作者观点,不代表本站立场。
本文系作者授权发表,未经许可,不得转载。