バッファBufferとチャネルチャネルチャネル
2449 ワード
一、一般的にバッファとチャネルを組み合わせて使用し、ファイルを書き込むときは、バッファに保存してからチャネルで書き込む必要があります.ファイルを読み込むときも同様に、チャネルを介してバッファに読み込みます.その後、バッファを介してファイルの内容を取得します.
Bufferはjavaの基本タイプごとに実装されています.Channelは異なる使用オブジェクトに対しても異なる実装があり、一般的にはFileChannelとSocketChannelの2種類が一般的である.
Buffer下位層は配列として実装され,3つの重要なパラメータ,position,limit,capacityがあり,それぞれ現在の位置,残りの空間,最大容量を表す
Bufferには2つのモードがあり、読み取りモードと書き込みモードがあります.メソッドflip()で読み出しモードに入り、clear()メソッドで書き込みモードに入ります.
二、コードの例:
上のコードでは、チャネルを介してファイルの内容をバッファに読み込み、チャネルを介してファイルに書き込みます.Bufferは、ファイルの読み込み前にclearを呼び出し、ファイルの書き込み前にflipを呼び出します.
Bufferはjavaの基本タイプごとに実装されています.Channelは異なる使用オブジェクトに対しても異なる実装があり、一般的にはFileChannelとSocketChannelの2種類が一般的である.
Buffer下位層は配列として実装され,3つの重要なパラメータ,position,limit,capacityがあり,それぞれ現在の位置,残りの空間,最大容量を表す
Bufferには2つのモードがあり、読み取りモードと書き込みモードがあります.メソッドflip()で読み出しモードに入り、clear()メソッドで書き込みモードに入ります.
二、コードの例:
package nio;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.nio.ByteBuffer;
import java.nio.channels.FileChannel;
/**
* NIO (Buffer FileChannel )
*
* @author
* @version $Id: CopyFile.java, v 0.1 2014 3 2 12:34:55 Exp $
*/
public class CopyFile {
public static void main(String[] args) throws Exception {
String srcFile = "D://1.wmv";
String targetFile = "D://2.wmv";
FileInputStream fin = null;
FileOutputStream fout = null;
FileChannel finc = null;
FileChannel foutc = null;
try {
fin = new FileInputStream(srcFile);
fout = new FileOutputStream(targetFile);
finc = fin.getChannel();
foutc = fout.getChannel();
ByteBuffer buffer = ByteBuffer.allocate(1024);
while (true) {
buffer.clear();
int n = finc.read(buffer);
if (n == -1) {
break;
}
buffer.flip();
foutc.write(buffer);
}
} catch (Exception e) {
e.fillInStackTrace();
} finally {
if (finc != null) {
finc.close();
}
if (foutc != null) {
foutc.close();
}
if (fin != null) {
fin.close();
}
if (fout != null) {
fout.close();
}
}
}
}
上のコードでは、チャネルを介してファイルの内容をバッファに読み込み、チャネルを介してファイルに書き込みます.Bufferは、ファイルの読み込み前にclearを呼び出し、ファイルの書き込み前にflipを呼び出します.