A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 熊永标 中级黑马   /  2012-12-20 17:54  /  893 人查看  /  0 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文


  • //问题是:不是说Nio非阻塞的,能提高效率。那下面的while(true)循环是不是就像阻塞了
  • //没什么区别呀,我不明白的地方就是NIo不阻塞,说的是哪里呀?
  • package sample;   
  •   
  • import java.io.FileInputStream;   
  • import java.io.FileOutputStream;   
  • import java.nio.ByteBuffer;   
  • import java.nio.channels.FileChannel;   
  •   
  • public class CopyFile {   
  •     public static void main(String[] args) throws Exception {   
  •         String infile = "C:\\copy.sql";   
  •         String outfile = "C:\\copy.txt";   
  •         // 获取源文件和目标文件的输入输出流   
  •         FileInputStream fin = new FileInputStream(infile);   
  •         FileOutputStream fout = new FileOutputStream(outfile);   
  •         // 获取输入输出通道   
  •         FileChannel fcin = fin.getChannel();   
  •         FileChannel fcout = fout.getChannel();   
  •         // 创建缓冲区   
  •         ByteBuffer buffer = ByteBuffer.allocate(1024);   
  •         while (true) {   
  •             // clear方法重设缓冲区,使它可以接受读入的数据   
  •             buffer.clear();   
  •             // 从输入通道中将数据读到缓冲区   
  •             int r = fcin.read(buffer);   
  •             // read方法返回读取的字节数,可能为零,如果该通道已到达流的末尾,则返回-1   
  •             if (r == -1) {   
  •                 break;   
  •             }   
  •             // flip方法让缓冲区可以将新读入的数据写入另一个通道   
  •             buffer.flip();   
  •             // 从输出通道中将数据写入缓冲区   
  •             fcout.write(buffer);   
  •         }   
  •     }   
  • }  

评分

参与人数 1技术分 +1 收起 理由
邵天强 + 1 鼓励一下

查看全部评分

0 个回复

您需要登录后才可以回帖 登录 | 加入黑马