分享

FileChannel类的简单用法_kj,jh

 Blex 2011-03-21

清单一:

import java.io.*;
import java.nio.*;
import java.nio.channels.*;
public class GetChannel
{
private static final int BSIZE = 1024;
public static void main(String[] args)throws IOException
{
    FileChannel fc = new FileOutputStream ("data.txt").getChannel();
    fc.write(ByteBuffer.wrap("some txt".getBytes()));//write()    Writes a sequence of bytes to
    //this channel from the given buffer
    fc.close();
    fc = new RandomAccessFile("data.txt","rw").getChannel();
    fc.position(fc.size());//abstract    FileChannel position(long newPosition)
                             //Sets this channel's file position.
    fc.write(ByteBuffer.wrap("some more".getBytes()));
    fc.close();
    fc =new FileInputStream("data.txt").getChannel();
    ByteBuffer bf =    ByteBuffer.allocate(BSIZE);//static ByteBuffer allocate(int capacity)
                                                    //Allocates a new byte buffer.
    //一旦调用read()来告知FileChannel向ByteBuffer存储字节,就必须调用缓冲器上的filp(),
    //让它做好别人存储字节的准备(是的,他是有点拙劣,但请记住他是很拙劣的,但却适于获取大速度)
    //
    fc.read(bf);// Reads a sequence of bytes from this channel into the given buffer
    bf.flip();
    while(bf.hasRemaining())
        System.out.print((char)bf.get());
}
}

 

清单二:

//Copying a file using channels and buffers;
import java.io.*;
import java.nio.*;
import java.nio.channels.*;
public class ChannelCopy
{
private static final int BSIZE = 1024;
public static void main(String [] args)throws IOException
{
   if (args.length!=2)
   {
    System.out.println("argument:sourcefile destfile");
    System.exit(1);
   }
   FileChannel
        in = new FileInputStream (args[0]).getChannel(),
        out = new FileOutputStream (args[1]).getChannel();
   ByteBuffer bb = ByteBuffer.allocate(BSIZE);
   while (in.read(bb)!=-1)
   {
    bb.flip();
    out.write(bb);
    bb.clear();//prepare for reading;清空缓冲区;
   }
}
}

 

清单三:

import java.io.*;
import java.nio.*;
import java.nio.channels.*;
public class TransferTo
{
public static void main(String [] args) throws IOException
{
   if(args.length!=2)
   {
    System.out.println("argument: sourcefile destfile");
    System.exit(1);
   }
   FileChannel
       in = new FileInputStream(args[0]).getChannel(),
       out = new FileOutputStream(args[1]).getChannel();
//abstract   long transferTo(long position, long count, WritableByteChannel target)
//          Transfers bytes from this channel's file to the given writable byte channel.
   in.transferTo(0,in.size(),out);
   //or
   //using out
//abstract   long transferFrom(ReadableByteChannel src, long position, long count)
      //      Transfers bytes into this channel's file from the given readable byte channel.
// out.transferFrom(in,0,in.size());
}
}

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多