旧的I/O类库中有三个类被修改了,可以产生FileChannel.
他们分别是可读的FileInputStream,用于生成通道;可写的FileOutputStream,用于生成通道,即可读又可写的RandomAccessFile,用于生成通道。
并且都是字节操纵流。而字符流则不能用于产生通道;
package part18; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.RandomAccessFile; import java.nio.ByteBuffer; import java.nio.channels.FileChannel; /** * Created by xueqin on 17/5/30. */ public class GetChannel { private static final int BSIZE=1024; public static void main(String[] args) throws Exception { FileChannel fc = new FileOutputStream("data.txt").getChannel(); fc.write(ByteBuffer.wrap("this is a test from FileOutputStream \n".getBytes())); fc.close(); fc = new RandomAccessFile("data.txt", "rw").getChannel(); fc.position(fc.size()); fc.write(ByteBuffer.wrap(" this is a test from RandomAccessFile".getBytes())); fc.close(); fc = new FileInputStream("data.txt").getChannel(); ByteBuffer buff = ByteBuffer.allocate(BSIZE); fc.read(buff); buff.flip(); while (buff.hasRemaining()) { System.out.print((char) buff.get()); } } }
运行输出结果为:
this is a test from FileOutputStream this is a test from RandomAccessFile
从中可以得出FileOutputStream和FileInputStream,RandomAccessFile可以通过getChannel()方法获取对应的通道,然后通过ByteBuffer缓存
块可以对其操作完成大量流的传输功能。