使用非直接缓冲区方式
完整代码:点我查看
创建文件流
// 创建文件流 FileInputStream fis = new FileInputStream("1.jpeg"); // 输入文件 FileOutputStream fos = new FileOutputStream("2.jpeg"); // 输出文件
获取通道
通过文件流获得通道
// 获取通道 FileChannel fisChannel = fis.getChannel(); FileChannel fosChannel = fos.getChannel();
分配缓存区(Buffer)
// 分配指定大小的缓冲区 ByteBuffer byteBuffer = ByteBuffer.allocate(1024);
传递数据
把输入通道
里数据,通过Buffer
传递给输出通道
,最后输出
// 将通道的数据存入缓冲区 while (fisChannel.read(byteBuffer) != -1){ byteBuffer.flip(); //切换为读取数据模式 // 将缓冲区的数据写入通道中 fosChannel.write(byteBuffer); byteBuffer.clear(); }
关闭 通道 & 流
// 关闭 通道 & 流 fisChannel.close(); fosChannel.close(); fis.close(); fos.close();
使用内存映射文件方式
完整代码:点我查看
创建文件流
// 创建文件流 FileInputStream fis = new FileInputStream("1.mp4"); // 输入流 FileOutputStream fos = new FileOutputStream("2.mp4"); // 输出流
获取通道
通过文件流获得通道
// 获取通道 FileChannel fisChannel = fis.getChannel(); FileChannel fosChannel = fos.getChannel();
创建内存映射文件
// 创建内存映射文件 MappedByteBuffer mappedByteBuffer = fisChannel.map(FileChannel.MapMode.READ_ONLY, 0, fisChannel.size()); fosChannel.write(mappedByteBuffer);
关闭流
fisChannel.close(); fosChannel.close();
版权声明:《 Java8 使用 NIO 复制文件 》为明妃原创文章,转载请注明出处!
最后编辑:2020-7-14 10:07:53