Channel与普通的流存在的差别是:Channel可以将文件的全部或者部分直接映射成为Buffer,程序不能直接访问Channel中的数据(读、写),只能通过Buffer来与Channel交互。
Channel是通过其功能进行划分的,如:DatagramChannel(UDP网络通信)、Pipe.sinkChannel(线程通信)......
public static void main(String[] args) {
File file = new File("src/threaddemo/FileChannelTest.java");
try (FileChannel inChannel = new FileInputStream(file).getChannel();
FileChannel outChannel = new FileOutputStream("test.txt")
.getChannel()) {
MappedByteBuffer buff = inChannel.map(
FileChannel.MapMode.READ_ONLY, 0, file.length());
Charset charset = Charset.forName("GBK");
outChannel.write(buff);
buff.clear();
CharsetDecoder decoder = charset.newDecoder();
CharBuffer charBuffer = decoder.decode(buff);
System.out.println(charBuffer);
} catch (IOException e) {
e.printStackTrace();
}
}
}
京公网安备 11010502036488号