JAVA-I/O-Buffer

 

[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();
		}
		
	}
}