LiangYongrui's Studio.

Java NIO Channel向Channel传输数据

2018/10/02 Share

本篇是Java NIO教程的第六篇。

目录

  1. java NIO 教程
  2. java NIO 概述
  3. java NIO Channel
  4. java NIO Buffer
  5. Java NIO 分散和聚集
  6. Java NIO Channel向Channel传输数据

概述

在Java NIO中 如果你使用的是FileChannel,你可以把数据从一个channel传输到另一个channel。FileChannel类的transferTo()transferFrom可以做到。

transferFrom()

FileChannel.transferFrom()方法可以吧数据从源channel传输到FileChannel。下面是一个简单的例子:

1
2
3
4
5
6
7
8
9
10
11
// java 11
var fromFile = new RandomAccessFile("fromFile.txt", "rw");
FileChannel fromChannel = fromFile.getChannel();

var toFile = new RandomAccessFile("toFile.txt", "rw");
FileChannel toChannel = toFile.getChannel();

long position = 0;
long count = fromChannel.size();

toChannel.transferFrom(fromChannel, position, count);

position代表目的文件开始的位置,count表示要传输的数据大小,如果fromChannel中的数据量比count小的话,就全部传输。

另外,一些SocketChannel的实现类可能只会传输它已经请求好的数据,因此它不一定会把全部数据都从ScoketChannel传到FileChannel.

transferTo()

transferTo()方法可以把数据从FileChannel中传到别的Channel。下面是一个简单的例子:

1
2
3
4
5
6
7
8
9
10
var fromFile = new RandomAccessFile("fromFile.txt", "rw");
FileChannel fromChannel = fromFile.getChannel();

var toFile = new RandomAccessFile("toFile.txt", "rw");
FileChannel toChannel = toFile.getChannel();

long position = 0;
long count = fromChannel.size();

fromChannel.transferTo(position, count, toChannel);

transferFrom()方法类似。也要注意ScoketChannel是目标Channel的问题,如果目标buffer已经满了,就不会传输了。

CATALOG
  1. 1. 目录
  2. 2. 概述
  3. 3. transferFrom()
  4. 4. transferTo()