清单一:
- 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());
- }
- }