public class ChannelTest{
public static void main(String[] args){
File f=new File("XXXX.txt")//后面要创建一个读通道,所以文件最好事先已存在
FileInputStream fis=new FileInputStream(f)
FileChannel fc=fis.getChannel()//获得文件读入流通道
//现在可以用通道读取文件了
ByteBuffer buf=ByteBuffer.allocate(1024)//定义一个缓冲区,用来存放通道读取的数据
byte[] b=new byte[buf.capacity()]//定义一个数组用来存放缓冲里面的数据,好像不能直接访问缓冲区里面的数据
long n=0/侍昌/判断标志
while(true){
n=fc.read(b)
if(n==-1)//-1说明已经到达文件流末尾
break
//输出读取的数据
buf.flip()
buf.get(b,0,buf.limit())//将缓冲区里的实际数据长度赋给数组
System.out.println(new String(b,0,b.length))
/仔谈蠢/必须念陪清空缓冲区,否则读不进来
buf.clear()
}
//关闭流
fis.close()
fc.close()
}
}
我希望从本地和远程复制文件,文件都很大洞颤,10G级的,如何快速的复制?看网上有尘颤扰人说使用管道到管道,这确实比其他的快,不知道fastcopy是怎样实现的 本地远程复制大文件啊,而且还是10G这么大的。你看看迅雷啊,他是多部分一起传的。Java传输文件就是一般的文件 *** 作啊,你可以模仿迅雷,开多个线程下载,每个线程记录下载部分的开始和结束索引,一起下到远程去。至于效率有多高,Java我还真不敢说,要不迅雷,快车这种工具怎么不用Java来开发。用FileChannel的transferTo(long position, long count, WritableByteChannel target)方法试试用FileChannel的transferTo(long position, long count, WritableByteChannel target)方法试试public static void main(String[] args)throws Exception{FileInputStream fileIn=new FileInputStream("d:/JavaTests/TestFileChannel.txt")FileOutputStream fileOut=new FileOutputStream("d:/JavaTests/TestFileOutputStreamCopyTime.txt")int ilong l=System.currentTimeMillis()while((i=fileIn.read())!=-1){fileOut.write(i)}System.out.println("Take time:"+(System.currentTimeMillis()-l)+"ms")//516msfileIn.close()本地远程复制大文件啊,而且还是10G这么大的。你看看迅雷啊,他是多部分一起传的。Java传输文件就是一般的文件 *** 作啊,你可以模仿迅雷,开多个线程下载,每个线程记录下载部分的开始和结束索引,一起下到远派旦程去。欢迎分享,转载请注明来源:内存溢出
评论列表(0条)