Java NIO FileChannel与FileOutputStream的性能/有用性我想弄清楚当我们使用nio时,在性能(或优势)上是否有什么不同。FileChannel与正常FileInputStream/FileOuputStream将文件读写到文件系统。我观察到,在我的机器上,两台机器的性能都是相同的,而且很多次FileChannel路慢了。我能知道更多比较这两种方法的细节吗?下面是我使用的代码,我正在测试的文件就在附近。350MB..如果我不考虑随机访问或其他高级特性,那么使用基于NIO的类进行文件I/O是一个很好的选择吗?package trialjavaprograms;import java.io.File;import java.io.FileInputStream;import java.io.FileOutputStream;import java.io.InputStream;import java.nio.ByteBuffer;import java.nio.channels.FileChannel;public class JavaNIOTest {
public static void main(String[] args) throws Exception {
useNormalIO();
useFileChannel();
}
private static void useNormalIO() throws Exception {
File file = new File("/home/developer/test.iso");
File oFile = new File("/home/developer/test2");
long time1 = System.currentTimeMillis();
InputStream is = new FileInputStream(file);
FileOutputStream fos = new FileOutputStream(oFile);
byte[] buf = new byte[64 * 1024];
int len = 0;
while((len = is.read(buf)) != -1) {
fos.write(buf, 0, len);
}
fos.flush();
fos.close();
is.close();
long time2 = System.currentTimeMillis();
System.out.println("Time taken: "+(time2-time1)+" ms");
}
3 回答
慕桂英3389331
TA贡献2036条经验 获得超8个赞
final FileInputStream inputStream = new FileInputStream(src);final FileOutputStream outputStream = new FileOutputStream(dest);final FileChannel inChannel = inputStream.getChannel();final FileChannel outChannel = outputStream.getChannel();inChannel.transferTo(0, inChannel.size(), outChannel);inChannel.close();outChannel.close();inputStream.close();outputStream.close();
许多操作系统可以直接将字节从文件系统缓存传输到目标通道,而无需实际复制它们。
慕无忌1623718
TA贡献1744条经验 获得超4个赞
复制1000 x2MB NiO(传输)~2300 ms NiO(直接数据库5000 b翻转)~3500 ms 标准IO(缓冲器5000 b)~6000 ms 复制100x20MB NiO(直接数据库5000 b翻转)~4000毫秒 NiO(转移自)~5000 ms 标准IO(缓冲器5000 b)~6500 ms 复制1x1000mb NiO(直接数据库5000 b翻转)~4500 s 标准IO(缓冲器5000 b)~7000毫秒 NiO(转移自)~8000 ms
添加回答
举报
0/150
提交
取消