IOとNIO操作ファイルの比較
2484 ワード
従来のIOはストリーム方式でデータを処理していたが、ストリーム向けのIOは一度に1バイトずつデータを処理し、簡単で便利だったが、効率は高くなかった.
NIOは、ブロックIOの処理方式を用いて、各動作が1ステップで1つのデータブロック(キャッシュ)を読み出したり書き出したりする.
IOとNIOの対比
1.1ファイルの内容を読み取る
IOを使用して指定ファイルの最初の1024バイトの内容を読み込む
1.2 NIOファイルの読み取り
NIOは、ブロックIOの処理方式を用いて、各動作が1ステップで1つのデータブロック(キャッシュ)を読み出したり書き出したりする.
IOとNIOの対比
1.1ファイルの内容を読み取る
IOを使用して指定ファイルの最初の1024バイトの内容を読み込む
private static void ioRead(String file) throws IOException {
FileInputStream in = new FileInputStream(file);
byte[] b = new byte[1024];
in.read(b);
System.out.println(new String(b));
}
NIOを使用して指定ファイルの最初の1024バイトの内容を読み込むprivate static void nioRead(String file) throws IOException {
FileInputStream in = new FileInputStream(file);
FileChannel channel = in.getChannel();
ByteBuffer buffer = ByteBuffer.allocate(1024);
channel.read(buffer);
byte[] b = buffer.array();
System.out.println(new String(b));
}
ストリーム向けIOでは、streamオブジェクトに直接データを書き込むか、streamオブジェクトにデータを読み込む.NIOでは、すべてのオブジェクトがバッファで処理され、読み込み書き込みデータはバッファに格納され、いつでもNIOにアクセスするデータはバッファに格納され、バッファは実際にはバイト配列であるが、配列だけでなく、バッファはまた、データへの構造的なアクセスを提供し、システムの読み書きプロセスを追跡することもできます.1.2 NIOファイルの読み取り
private static void nioRead(String file) throws IOException {
FileInputStream in = new FileInputStream(file);
// , FileInputStream
FileChannel channel = in.getChannel();
//
ByteBuffer buffer = ByteBuffer.allocate(1024);
//
channel.read(buffer);
byte[] b = buffer.array();
System.out.println(new String(b));
}
1.3 NIO書き込みファイルprivate static void NIOWrite(String file) throws IOException {
FileOutputStream out = new FileOutputStream(file);
// , FileInputStream
FileChannel channel = out.getChannel();
// ,
ByteBuffer buffer = ByteBuffer.allocate(1024);
buffer.put(" NIO".getBytes());
buffer.flip();
//
channel.write(buffer);
}
1.4ファイルコンテンツコピーprivate static void NIOCopy(String file) throws IOException {
FileOutputStream out = new FileOutputStream(file);
FileInputStream in = new FileInputStream(file);
//
FileChannel outChannel = out.getChannel();
FileChannel inChannel = in.getChannel();
//
ByteBuffer buffer = ByteBuffer.allocate(1024);
while(true){
//clear ,
buffer.clear();
//
int r = inChannel.read(buffer);
//read , , , , -1
if(r == -1){
break;
}
//flip , ,
buffer.flip();
//
outChannel.write(buffer);
}
}