私は 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 でした。