package niotest;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.RandomAccessFile;
import java.nio.ByteBuffer;
import java.nio.channels.FileChannel;
/**
* @program: javaio
* @description: 新IO相关类练习
* @author: Miller.FAN
* @create: 2019-10-22 11:07
**/
public class GetChannels {
private static final int SIZE = 10*1024;
public static void main(String[] args) throws Exception{
FileChannel fc = new FileOutputStream("data.txt").getChannel();
fc.write(ByteBuffer.wrap("Some text \n".getBytes()));
fc.close();
//从一个文件中读取信息到一个ByteBuffer
FileChannel in = new FileInputStream("D:\\废弃代码\\network_monitoring\\network-monitoring-ue-big-data-task\\pom.xml").getChannel();
ByteBuffer myBuf = ByteBuffer.allocate(SIZE);
in.read(myBuf);
myBuf.flip(); // 让myBuf准备好被读 主要是这个类中只维护了一个游标,读写共用
//将myBuf中的信息写进data.txt
FileChannel out = new RandomAccessFile("data.txt","rw").getChannel();
out.position(out.size()); // 设置从末尾开始写
out.write(myBuf);
out.close();
myBuf.clear();
//展示写的结果
fc = new FileInputStream("data.txt").getChannel();
ByteBuffer buff = ByteBuffer.allocate(SIZE);
fc.read(buff);
buff.flip();
while(buff.hasRemaining()) {
System.out.print((char)buff.get());
}
fc.close();
//有没有更简单的办法呢? 当然有
FileChannel my_in = new FileInputStream("D:\\废弃代码\\network_monitoring\\network-monitoring-ue-big-data-task\\pom.xml").getChannel(),
my_out = new FileOutputStream("data2.txt").getChannel();
my_in.transferTo(0,my_in.size(),my_out);
}
}