ChractorStream의 Write와 Read



[Stream Class ]

Stream 클래스는 크게 4가지로 나눈다 

이번 시간에는 Character 스트림의 FileWriter, BufferdWrite, PrintWriter에 대해 공부해보자



**Chractor Stream 

=> 데이터를 문자 단위로 주고 받는 스트림 

=> 문자 단위로 주고 받을려면 인코딩 방식이 같아야 합니다.

1. 인코딩 방식 

=> 문자 데이터를 컴퓨터의 메모리에 저장하기 위해서 숫자로 변경하는 방식


1) ASCII Code 

=> 영문자와 숫자를 표현하기 위한방식으로 전세계 모든 곳에서 공통으로 사용

=> 영문자나 숫자 1개를 8bit 로표현 ( 시험에서는 7bit )

=> '0' -> 48 , 'A'-> 65, 'a'->97, NULL->0


2)EUC-KR(MS949, CP949)

=> Microsoft가 한글을 표현하는 방법 

=> Windows는 기본적으로 cp949 이고 IE(Internet Explorer) 예전버전이 사용 

=> 예전에 만들어진 웹 사이트의 인코딩이 이 방식입니다. 


3) UTF - 8 

=> microsoft를 제외한 운영체제에서의 한글 표현방법

=> IE를 제외한 모든 브라우저가 UTF-8 방식이

=> 최근에 만들어진 웹사이트의 인코딩방식은 거의 이방식입니다. 


문자기반 스트림은 단순히 2byte로 스트림처리하는 것만을 의미하지 않는다. 

더 중요한 것은 인코딩이다 자바에 Read와 Write는 자동으로 인코딩하여 저장한다.

그 예로 한글을 저장한 파일을 읽어서 출력을 해보면 

 byte스트림과 Charater의 차이는 확연해진다. 

byte 스트림의 FileInputStream을 사용하면 한글을 깨지지만, 

문자기반스트림인 FileReader는 한글이 깨져서 나오지 않는다 

즉, 인코딩해서 나오지 않기 때문에 파일이 깨져서 나오는 것이다.


**Writer -문자 단위로 기록하기 위한 메소드의 이름을 가진 추상클래스 


메소드 

void close() : 닫기 

void flush() : 버퍼에 있는 모든 내용을 출력 

void write(String str ) : 문자열 전체를 기록 

void write(String str, int off,int len) : 문자열에서 off 부터 len만큼 기록 



** FileWriter

FileWriter(File file) : File 객체로 만들기 

FileWriter(File file, boolean append) : File 객체와 추가모드를 설정해서 객체 만들기 

FileWriter(String filepath) : 파일경로를 가지고 만들기 

FileWriter(String filepath,boolean append) :파일 경로와 추가 모드를 설정해서 객체만들기 




**BufferedWriter -> PrintWriter -

BuffredWriter 보다 PrintWriter을 더 사용하길 추천합니다. 

BuffredWriter 는 Writer만 사용할 수 있지만 .

 PrintWriter 는 Writer 뿐만 아니라 기록하는 메소드로 print, printf, println이 추가되어 있습니다.

[생성자]

printWriter(String fileName) : 파일 경로를 가지고 생성 

printWriter(File file): File 객체를 가지고 생성과

printWriter(OutPutStream out) : NetWork를 통해서 얻어온 OutPutStream객체를 가지고 만들 때 주로 사용 

printWriter(Writer out) : FileWriter와 같은 객체를 이용해서 생성



 [ PrintWriter 코드 ]


[결과]


Read



**Reader- 문자 단위로 데이터를 읽기 위한 메소드를 소유한 추상 클래스 


[메소드]

void close() : 닫기

int read() : 한 글자를 읽어서 리턴, 글자를 못읽으면 음수를 리턴 

int read(char[] cbuf) :  cbuf의 크기만큼 읽어서 cbuf에 저장하고 읽은 개수를 리턴하는데 못 읽으면 0보다 작거나 같은 수 리턴 

int read(char[] cbuf, int off, int len) : cbuf 배열에 off 부터 len만큼 읽어서 cbuf 에 저장하고 읽은 개수를 리턴하는데 못 읽으면 0보다 작거나 같은 수를리턴 



[File Reader] 

**File Reader 

[생성자]

FileReader(File file) : File 객체 가지고 만들기 

FileReader(FileDescriptor fd) : 파일의 경로를 문자열로 대입해서 만들기 




**BufferdReader

[생성자]

BufferedReader(Reader in) : Reader 객체를 가지고 만들기 

BufferedReader(Reader in, int sz) : Reader 객체와 버퍼의 크기를 설정해서만들기 

BufferdReader 생성자에는 Reader형태의 자료형이 들어가야합니다. 

그러나 Reader는 추상 클래스 이므로 Reader 아래에 있는  File Reader 생성해서 사용하면됩니다.

[메소드]

String readLine() : 줄 단위로 읽어서 리턴하는데 읽은게 없으면 null을 리턴 

[BufferdReader 코드]








+ Recent posts