[Buffer]
컴퓨터 느린 작업 (DISK 파일 read, write)
File 작업 (DISK) (read, write) byte 단위
위 같은 문제를 해결하기 위해서
Buffer 메모리 (작접 해 둔것을)
무조건: file 작업할때 중간에 Buffer 사용하기!!!
File I/O 성능개선
Line 단위 처리
JAVA API
보조 스트림(input, output 추상클래스 상속한 클래스가 객체로 존재해야지만 사용가능)
BufferedInputStream
BufferedOutputStream
public static void main(String[] args) {
FileOutputStream fos = null;
BufferedOutputStream bos = null;
try {
fos = new FileOutputStream("data.txt"); //파일 생성 기능 가지고 있다
bos = new BufferedOutputStream(fos);
for(int i = 0; i < 10; i++) {
bos.write('A');
}
/*
java buffer 크기: 8kByte => 8192Byte
1.buffer 안에 내용이 8kByte 채우면 자동으로 비운다 (요청자에게 준다)
2.buffer 강제로 비우는 방법: flush() 강제호출
3.bos.close(); 내부에서 flush() 호출
*/
//bos.flush();
}catch(Exception ex) {
System.out.println(ex.getMessage());
}finally {
try {
bos.close(); //buffer close(flush() 포함)
fos.close();
}catch (IOException e) {
e.printStackTrace();
}
}
}
//한글 2Byte -> Stream 통한 통신 불가 (Byte 단위)
//2Byte 문자 -> Reader, Writer 추상 클래스
public static void main(String[] args) {
FileReader fr = null;
FileWriter fw = null;
try {
fr = new FileReader("Ex01_Stream.java");
fw = new FileWriter("copy_Ex01.txt"); //파일 생성 기능
int data = 0;
while((data = fr.read()) != -1) {
//System.out.println(data + " : " + (char)data);
//fw.write(data);
if(data != '\n' && data != '\r' && data != '\t' && data != ' ') {
fw.write(data); //Compressed data 압축데이터
}
}
}catch(Exception e) {
System.out.println("문제가 있다");
}finally {
try {
fw.close();
fr.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
//문자 처리 시에도 Buffer 사용 I/O 성능 향상
//Buffer 장점: Line 단위 read, writer
public static void main(String[] args){
/*
FileWriter fw = new FileWriter("a.txt");
BufferedWriter bw = new BufferedWriter(fw);
bw.write("로또");
bw.newLine(); //장점
bw.write("1,2,3,4,5");
bw.flush();
*/
FileReader fr = null;
BufferedReader br = null;
try {
fr = new FileReader("Ex01_Stream.java");
br = new BufferedReader(fr);
String line = "";
//br.readLine() >> POINT
for(int i = 0; (line = br.readLine()) != null; i++) {
//System.out.println(line);
if(line.indexOf(";") != -1) {
System.out.println(line);
}
}
}catch(Exception e) {
}finally {
try {
br.close();
fr.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}