开发中常有需求将文件转成byte[]数组的场景,这里总结了一下几种常用的File转bytes的方式(直接转成bytes需要在内存里存放,所以仅使用文件不大的场景,如果遇到的文件很大,那么可能做法不是这样的,例如使用随机读取,一边读取一边处理等方式(RandomAccessFile)):
- 使用apache commons io 这个库,引入依赖:
<dependency> <groupId>commons-io</groupId> <artifactId>commons-io</artifactId> <version>2.11.0</version> </dependency>
引入后,代码中这样使用:
byte[] bytes = org.apache.commons.io.IOUtils.toByteArray(Files.newInputStream(file.toPath()));
- 使用Java的NIO
Path path = Paths.get(file.getAbsolutePath()); byte[] bytes = Files.readAllBytes(path);
- 最传统的方式,用流读出来
InputStream is = new FileInputStream(file); ByteArrayOutputStream buffer = new ByteArrayOutputStream(); int nRead; byte[] data = new byte[8192]; while ((nRead = is.read(data, 0, data.length)) != -1) { buffer.write(data, 0, nRead); } return buffer.toByteArray();
文章评论