Java8 使用 NIO 复制文件

使用非直接缓冲区方式

完整代码:点我查看

创建文件流

// 创建文件流
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();
发表评论 / Comment

用心评论~