开发中常有需求将文件转成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();
文章评论