チャネルとバッファ(java.nioから)を使用して、ファイルから作成したオブジェクトの種類を読み書きすることが可能かどうかを知りたいですか?チャネルとバッファ(java.nio)を使用して、ファイルから作成したオブジェクトの種類を読み書きすることはできますか?
たとえば、ここにコードサンプルがあります(コードの一部ではないので、「finally」またはそれ以上のtry-with-ressourcesを使用しないでください)。なぜこの質問をしているのかを示す例です。私は(test.txtの4 Moのファイルである)、このコードを実行すると
import java.io.BufferedInputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.nio.ByteBuffer;
import java.nio.CharBuffer;
import java.nio.channels.FileChannel;
public class Main {
public static void main(String[] args) {
FileInputStream fis;
BufferedInputStream bis;
FileChannel fc;
try {
fis = new FileInputStream(new File("test.txt"));
bis = new BufferedInputStream(fis);
//initializing timer
long time = System.currentTimeMillis();
//reading
while(bis.read() != -1);
//execution time
System.out.println("Execution time with a conventionnal buffer (BufferedInputStream) : " + (System.currentTimeMillis() - time));
//again
fis = new FileInputStream(new File("test.txt"));
//but we catch the channel
fc = fis.getChannel();
//from that we deduce the size
int size = (int)fc.size();
//We create a buffer corresponding to the size of the file
ByteBuffer bBuff = ByteBuffer.allocate(size);
//initializing the timer
time = System.currentTimeMillis();
//starting reading
fc.read(bBuff);
//preparing reading calling flip
bBuff.flip();
//printing execution time
System.out.println("Execution time with a new buffer (java.nio Buffer) : " + (System.currentTimeMillis() - time));
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}
、Iは、実行時間が約10倍速い第二の方法と最初のものよりもあることがわかります。 この例では、これはバイトバッファで行われますが、任意の種類のプリミティブ型(IntBuffer、CharBuffer、...)で行うことができます。
作成したオブジェクトのタイプでこの2番目のメソッド(java.nio Bufferを使用)を使用することもできますか?それが唯一の第2のケースで下塗りされたキャッシュをテストして、
ObjectInputStream ois = new ObjectInputStream(
new BufferedInputStream(
new FileInputStream(
new File("test.txt"))));