★JAVAで作成2(nioパッケージ利用)
JAVAではバージョン1.4から、NIOパッケージ(New I/O)が加えられました。
以下のプログラムは、その機能を利用したバージョンです。
import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import java.nio.channels.FileChannel; public class CopyByJava2 { public void execute(String src, String dest) throws IOException { FileInputStream in = null; FileOutputStream out = null; try { // ファイルのオープン in = new FileInputStream(src); out = new FileOutputStream(dest); // コピー準備 FileChannel cIn = in.getChannel(); FileChannel cOut = out.getChannel(); // コピー実行 cIn.transferTo(0, cIn.size(), cOut); } finally { // ファイルクローズ try { if(in != null) { in.close(); } } catch(IOException e) { } try { if(out != null) { out.close(); } } catch(IOException e) { } } } public static void main(String[] args) { if(args.length < 2) { System.out.println("java CopyByJava2 [コピー元ファイルパス] [コピー先ファイルパス]"); return; } else if(args[0].equals(args[1])) { System.out.println("コピー元とコピー先が同じです。"); return; } long start = System.currentTimeMillis(); try { new CopyByJava2().execute(args[0], args[1]); } catch(IOException e) { e.printStackTrace(); return; } long end = System.currentTimeMillis(); System.out.println((end - start)/1000.0 + " 秒経過"); } } |
JAVA(ioパッケージ利用)と殆ど同じですが、FileChannelクラスが登場しています。
このFileChannelクラスはNIOで提供される機能の一つです。そして、NIOは主に(速度的な)パフォーマンスを上げる事を目的に導入されました。
実際にパフォーマンス上の利点があるのでしょうか?その事を調べる目的も込めて比較対象に加えています。
次回は、これまでに挙げた4種類のプログラムを使用して、実際に測定をしてみましょう。