在Java NIO中,可以非常频繁地将数据从一个通道传输到另一个通道。批量传输文件数据是非常普遍的,因为几个优化方法已经添加到FileChannel
类中,使其更有效率。
通道之间的数据传输在FileChannel
类中的两种方法是:
FileChannel.transferTo()
方法FileChannel.transferFrom()
方法
FileChannel.transferTo()方法
transferTo()
方法用来从FileChannel
到其他通道的数据传输。
下面来看一下transferTo()
方法的例子:
public abstract class Channel extends AbstractChannel
{
public abstract long transferTo (long position, long count, WritableByteChannel target);
}
FileChannel.transferFrom()方法
transferFrom()
方法允许从源通道到FileChannel
的数据传输。
下面来看看transferFrom()
方法的例子:
public abstract class Channel extends AbstractChannel
{
public abstract long transferFrom (ReadableByteChannel src, long position, long count);
}
基本通道到通道数据传输示例
下面来看看从4
个不同文件读取文件内容的简单示例,并将它们的组合输出写入第五个文件:
package com.yiibai;
import java.io.File;
import java.io.FileOutputStream;
import java.io.FileInputStream;
import java.nio.channels.WritableByteChannel;
import java.nio.channels.FileChannel;
public class TransferDemo {
public static void main(String[] argv) throws Exception {
String relativelyPath = System.getProperty("user.dir");
// Path of Input files
String[] iF = new String[] { relativelyPath + "/input1.txt", relativelyPath + "/input2.txt",
relativelyPath + "/input3.txt", relativelyPath + "/input4.txt" };
// Path of Output file and contents will be written in this file
String oF = relativelyPath + "/combine_output.txt";
// Acquired the channel for output file
FileOutputStream output = new FileOutputStream(new File(oF));
WritableByteChannel targetChannel = output.getChannel();
for (int j = 0; j < iF.length; j++) {
// Get the channel for input files
FileInputStream input = new FileInputStream(iF[j]);
FileChannel inputChannel = input.getChannel();
// The data is tranfer from input channel to output channel
inputChannel.transferTo(0, inputChannel.size(), targetChannel);
// close an input channel
inputChannel.close();
input.close();
}
// close the target channel
targetChannel.close();
output.close();
System.out.println("All jobs done...");
}
}
在上述程序中,将4
个不同的文件(即input1.txt
,input2.txt
,input3.txt
和input4.txt
)的内容读取并将其组合的输出写入第五个文件,即:combine_output.txt
文件的中。combine_output.txt
文件的内容如下 -
this is content from input1.txt
this is content from input2.txt
this is content from input3.txt
this is content from input4.txt