반응형
FileChannel
java의 NIO에서 좀더 빠른 속도로 access를 하기 위해 나옴
Buffer 객체를 입출력 자료형으로 사용함
InputStream : 읽기 전용 채널을 얻을 수 있음
OutputStream : 쓰기 전용 채널을 얻을 수 있음
RandomAccessFile : 읽기/쓰기 전용 채널을 얻음
Buffer의 allocateDirect 를 통해 시스템 메모리 공간을 활용하므로서 속도 향상
샘플 예제
RandomAccessFile raf = new RandomAccessFile("addfile/test.txt", "rw");
FileChannel fc = raf.getChannel();
String message = "안녕하세요..";
ByteBuffer byteBuf1 = ByteBuffer.allocate(message.getBytes().length);
byteBuf1.put(message.getBytes());
// limit를 현재 position
// position 을 0 으로 setting
byteBuf1.flip();
fc.write(byteBuf1);
ByteBuffer byteBuf2 = ByteBuffer.allocate(300);
fc.position(0);
fc.read(byteBuf2);
byteBuf2.flip();
byte[] b = byteBuf2.array();
System.out.println(new String(b));
fc.close();
raf.close();
java의 NIO에서 좀더 빠른 속도로 access를 하기 위해 나옴
Buffer 객체를 입출력 자료형으로 사용함
InputStream : 읽기 전용 채널을 얻을 수 있음
OutputStream : 쓰기 전용 채널을 얻을 수 있음
RandomAccessFile : 읽기/쓰기 전용 채널을 얻음
Buffer의 allocateDirect 를 통해 시스템 메모리 공간을 활용하므로서 속도 향상
샘플 예제
RandomAccessFile raf = new RandomAccessFile("addfile/test.txt", "rw");
FileChannel fc = raf.getChannel();
String message = "안녕하세요..";
ByteBuffer byteBuf1 = ByteBuffer.allocate(message.getBytes().length);
byteBuf1.put(message.getBytes());
// limit를 현재 position
// position 을 0 으로 setting
byteBuf1.flip();
fc.write(byteBuf1);
ByteBuffer byteBuf2 = ByteBuffer.allocate(300);
fc.position(0);
fc.read(byteBuf2);
byteBuf2.flip();
byte[] b = byteBuf2.array();
System.out.println(new String(b));
fc.close();
raf.close();