int readBytes = channel.read(buffer);
ByteBuffer buffer = ...;
buffer.put(...); // 存入数据
buffer.flip(); // 切换读模式
while(buffer.hasRemaining()) {
channel.write(buffer);
}
long pos = channel.position();
long newPos = ...;
channel.position(newPos);
创建一个from.txt文件,内容如下:
创建一个文件内容为空的to.txt文件,如下:
package com.example.nettytest.nio.day2;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.nio.channels.FileChannel;
/**
* @description: 通过两个Channel传输数据示例
* @author: xz
* @create: 2022-07-26 21:45
*/
public class TestFileChannelTransferTo {
public static void main(String[] args) {
transferTo1();
}
//通过FileChannel传输数据(方式一)
public static void transferTo1(){
/**
* 新建2个FileChannel
* from 表示从from.txt读取内容
* to 表示向to.txt写入内容
* */
try (FileChannel from = new FileInputStream("file/from.txt").getChannel();
FileChannel to = new FileOutputStream("file/to.txt").getChannel();
)
{
/**
*第一个参数表示起始位置下标
*第二个参数表示读取文件内容的大小
*第三个参数表示向哪个文件里写
* transferTo 数据传输方法
* */
from.transferTo(0,from.size(),to);
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}
创建一个from.txt文件,内容如下:
创建一个文件内容为空的to.txt文件,如下:
package com.example.nettytest.nio.day2;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.nio.channels.FileChannel;
/**
* @description: 通过两个Channel传输数据示例
* @author: xz
* @create: 2022-07-26 21:45
*/
public class TestFileChannelTransferTo {
public static void main(String[] args) {
transferTo2();
}
//通过FileChannel传输数据(方式二),传输数据 >2G
public static void transferTo2(){
/**
* 新建2个FileChannel
* from 表示从from.txt读取内容
* to 表示向to.txt写入内容
* */
try (FileChannel from = new FileInputStream("file/from.txt").getChannel();
FileChannel to = new FileOutputStream("file/to.txt").getChannel();
)
{
/**
* 此方式效率高,底层会利用操作系统的零拷贝进行优化 传输数据 >2G
* left 表示 变量代表还剩余多少字节
* left =from.size() 表示初始大小为from.txt文件内容的大小
* left >0 表示初始时大小 > 0
* */
for (long left =from.size(); left >0;){
/**from.size() - left 表示起始位置下标
* left 表示剩余多少字节下标
*/
System.out.println("position:" + (from.size() - left) + " left:" + left);
//transferTo 数据传输方法
left -= from.transferTo((from.size() - left), left, to);
}
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}
版权说明 : 本文为转载文章, 版权归原作者所有 版权申明
原文链接 : https://wwwxz.blog.csdn.net/article/details/126003666
内容来源于网络,如有侵权,请联系作者删除!