3

私は Java NIO に非常に慣れていないため、実際に操作したことはありません。Java NIO に関して私が知っているのは、Java.IO よりも速いということです。

そこで、試しに「あるファイルの内容を別のファイルにコピーする」ための簡単なプログラムを作成することを考えました。「大きなファイルから単語を検索」。

java.io と java.nio パッケージの両方を使用します。

また、操作開始と終了の前後の時間をそれぞれ出力しました。

NIOの方が速いという違いはありませんでした。私は間違った方向に進んでいるのかもしれません。

例を通して違いを適切に確認できるシナリオを教えてください。

編集:

この質問が反対票を獲得することを知って、私は本当に驚いています. 私はNIOを初めて使用することを述べましたが、間違った方向に進んでいる場合は私を案内してくれます. 非常に基本的な読み書き操作だったので、プログラムを投稿していません...以下のプログラムを参照してください。

IO の使用

public static void copyFile(File in, File out) throws Exception {

    SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS");
    Date now = new Date();
    String strDate = sdf.format(now);

    System.out.println("Before Read :"+strDate);


    FileInputStream fis  = new FileInputStream(in);
    FileOutputStream fos = new FileOutputStream(out);
    try {
        byte[] buf = new byte[1024];
        int i = 0;
        while ((i = fis.read(buf)) != -1) {
            fos.write(buf, 0, i);
        }
    } 
    catch (Exception e) {
        throw e;
    }
    finally {
        if (fis != null) fis.close();
        if (fos != null) fos.close();
    }

    Date now1 = new Date();
    String strDate1 = sdf.format(now1);

    System.out.println("After Read :"+strDate1);


}

NIO の使用

 public static void copyFile(File in, File out) 
        throws IOException 
{

    SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS");
    Date now = new Date();
    String strDate = sdf.format(now);

    System.out.println("Before Read :"+strDate);

    FileChannel inChannel = new
        FileInputStream(in).getChannel();
    FileChannel outChannel = new
        FileOutputStream(out).getChannel();
    try {
        inChannel.transferTo(0, inChannel.size(),
                outChannel);
    } 
    catch (IOException e) {
        throw e;
    }
    finally {
        if (inChannel != null) inChannel.close();
        if (outChannel != null) outChannel.close();
    }

    Date now1 = new Date();
    String strDate1 = sdf.format(now1);

    System.out.println("After Read :"+strDate1);
}

あるファイルから別のファイルにコピーするために与えたファイルは、約 20 MB でした。

4

2 に答える 2