티스토리 뷰

1.    Reader

-      문자 기반 입력 스트림의 최상위 클래스로 추상 클래스

-      하위 클래스 : FileReader, BuffredReader, InputStreamReader

-      문자 기반 입력 스트림이기에 배열의 타입도 byte가 아니라 char타입이다.

-      사용이 끝나면 반드시 close( )로 닫아야 한다.

 

2.    Writer

-      문자 기반 출력 스트림의 최상위 클래스로 추상 클래스이다.

-      출력 스트림이기에 flush( )를 통해 버퍼에 잔류하는 문자열을 출력하고, close( )로 닫아야 한다.

-      하위 클래스 :

 

3.    문자의 인코딩 ( Encoding ) / 디코딩 ( Decoding )

-      1 ) Encoding : 문자 => 바이트열로 변환 ( using 문자집합 )

-      2 ) Decoding : 바이트열 => 문자로 역변환 ( using 문자집합 )

-      문자를 바이트열로 변환할 때와 바이트열을 문자로 역변환할 때 같은 문자집합을 사용해야 한다.


더보기

01. InputStream - 바가지(배열)로 읽기

package inputstream_read2;

import java.io.FileInputStream;
import java.io.InputStream;
import java.nio.charset.Charset;
import java.nio.charset.StandardCharsets;
import java.util.Set;
import java.util.SortedMap;

public class ReadExample1 { // InputStream - 바가지로 읽기
	
	public static void main(String[] args) throws Exception { 
		
		InputStream is = new FileInputStream("C:/Temp/TTT.txt");
		
		int readByteNo;
		String data = "";
		
		byte [] readBytes = new byte[3]; // 바가지 준비 - 사이즈 3의 바가지 준비
		
		while(true) {
			
			// 바가지로 한번에 3개의 바이트를 읽어낸다.
			readByteNo = is.read(readBytes);
			
			// 탈출조건
			if(readByteNo == -1) { // EOF(-1)이면, 탈출!
				break;
			} // if
			
			// String 클래스의 다양한 생성자를 꼭 연습하는 것이 좋다!!(***)
//			data += new String(readBytes,0,readByteNo);
			// String ( 배열, 시작하는 인덱스 번호, 읽어내는 배열의 크기) (****)
//			 ---> public String(byte[] bytes, int offset, int length)
			// 이 방법은 여전히 한글이 깨져서 나온다는 것을 알 수 있다.
			
//			====================================================================
			
			// Charset (****)
			
			Charset ms949 = Charset.defaultCharset(); // 운영체제의 문자집합 생성 ( MS949 )
			Charset utf8 = Charset.forName("UTF-8");
			Charset utf8_2 = StandardCharsets.UTF_8;
			
			SortedMap<String, Charset> charsets = Charset.availableCharsets();
			Set <String> keys = charsets.keySet();
			
			System.out.println(keys); // 사용가능한 언어의 종류가 출력된다.
			System.out.println();
			
//			====================================================================
			
			data += new String(readBytes,0,readByteNo,"UTF-8");
//			public String(byte[] bytes, int offset, int length, String charsetName)
			// 이 버전은 한글이 깨지지 않고 잘 출력 된다.(****)
			
		} // while
		
		System.out.println(data); // 홍길동
		
		// 자원 해제
		is.close(); // @Cleanup으로 대체할 수 있다.
		
	} // main

} // end class

더보기

02. InputStream - 바가지로 읽기 ( 읽어내는 범위 지정 )

package inputstream_read2;

import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.Arrays;

public class ReadExample2 {
	
	public static void main(String[] args) throws Exception { 
		
		InputStream is = new FileInputStream("C:/Temp/TTT.txt");
		
		byte[] readBytes = new byte[8]; // 8바이트 크기의 바가지 준비
		
		// 실제 바가지에 담긴 바이트의 개수를 반환
		int readByteNo = is.read(readBytes,2,3); 
//		public int read(byte b[], int off, int len) throws IOException 
		// 바가지에 있는 데이터를 모두 사용하는 것이 아니라 2번인덱스부터 3개를 읽어내라.
		
//		int readByteNo1 = is.read(readBytes,0,readBytes.length);
		// 이렇게 작성하게 되면 전부 읽어내게 된다.
		
//		==============================================
		
//		for ( int i=0; i<readBytes.length; i++) { 
//			System.out.println(readBytes[i]);
//		} // for
		
//		==============================================
		
		System.out.println(Arrays.toString(readBytes));
		// 출력 : [0, 0, -19, -103, -115, 0, 0, 0]
		// 바가지에 있는 데이터를 모두 사용하는 것이 아니라 2번인덱스부터 3개를 읽어냈다.
		
		is.close(); // 자원 해제
		
	} // main

} // end class

더보기

03. OutputStream - 문자열 인코딩

package outpurstream_write;

import java.io.FileOutputStream;
import java.io.OutputStream;

public class WriteExample1 {
	
	public static void main(String [] args) throws Exception { // OutputStream
		
		// 자원객체
		OutputStream os = new FileOutputStream("C:/Temp/TTT.txt", true);
		// 뒤에 true를 작성하면 "ABC"가 추가되지만,
		// 생략하거나 false를 작성하면 기존의 문자열을 없애고 "ABC"를 작성하게 된다.
		
		// 문자열 인코딩( 문자열을 바이트열로 변환 )
		byte [] data = "ABC".getBytes(); // (*****)
		
		for(int i=0; i<data.length; i++) { 
			os.write(data[i]);
		} // for
		
		os.flush(); // 출력 스트림의 버퍼 (****)
		
		os.close(); // 자원 (***)
		
	} // main

} // end class

더보기

04. OutputStream 2 - try - with - resource

package outpurstream_write;

import java.io.FileOutputStream;
import java.io.OutputStream;

public class WriteExample2 {
	
	public static void main(String [] args) throws Exception { // OutputStream - try - with - resources 버전
		
		// 자원객체
		OutputStream os = new FileOutputStream("C:/Temp/TTT.txt", true);
		// 뒤에 true를 작성하면 "ABC"가 추가되지만,
		// 생략하거나 false를 작성하면 기존의 문자열을 없애고 "ABC"를 작성하게 된다.
		
		try( os; ){
			// 문자열 인코딩( 문자열을 바이트열로 변환 )
			byte [] data = "ABC".getBytes(); // (*****)
		
			for(int i=0; i<data.length; i++) { 
				os.write(data[i]);
			} // for
		
			os.flush(); // 출력 스트림의 버퍼 (****)
		
//			os.close(); // try - with - resources가 자동으로 받아준다.
			
		} // try - with - resources
		
	} // main

} // end class

더보기

05. OutputStream 3 - @Cleanup

package outpurstream_write;

import java.io.FileOutputStream;
import java.io.OutputStream;

import lombok.Cleanup;

public class WriteExample3 {
	
	public static void main(String [] args) throws Exception { // OutputStream - @Cleanup
		
		// 자원객체
		@Cleanup
		OutputStream os = new FileOutputStream("C:/Temp/TTT.txt", true);
		
		// 뒤에 true를 작성하면 "ABC"가 추가되지만,
		// 생략하거나 false를 작성하면 기존의 문자열을 없애고 "ABC"를 작성하게 된다.
		
		// 문자열 인코딩( 문자열을 바이트열로 변환 )
		byte [] data = "ABC".getBytes(); // (*****)
		
		for(int i=0; i<data.length; i++) { 
			os.write(data[i]);
		} // for
		
		os.flush(); // 출력 스트림의 버퍼 (****)
		
//		os.close(); // @Cleanup이 대신해준다.
		
	} // main

} // end class

더보기

06. OutputStream 4 - 고속 출력

package outpurstream_write;

import java.io.FileOutputStream;
import java.io.OutputStream;

public class WriteExample4 {
	
	public static void main(String [] args) throws Exception { // OutputStream 2
		
		// 자원객체
		OutputStream os = new FileOutputStream("C:/Temp/TTT.txt", true);
		
		byte [] data = "ABC".getBytes(); // (*****)
		
		os.write(data); // 바가지채로 출력버퍼에 고속출력(부어버림)
		
		os.flush(); // 출력 스트림의 버퍼 (****)
		
		os.close(); // 자원 (***)
		
	} // main

} // end class

더보기

07. OutputStream - UTF-8 적용하기

package outpurstream_write;

import java.io.FileOutputStream;
import java.io.OutputStream;

public class WriteExample5 {
	
	public static void main(String [] args) throws Exception { // OutputStream 3
		
		// 자원객체
		OutputStream os = new FileOutputStream("C:/Temp/TTT2.txt");
		
		byte[] data = "허서낭".getBytes("UTF-8"); // 기본문자셋으로 인코딩이 된다.
		// 같은 문자집합을 사용해야지만 문자가 깨지지 않고 들어갈 수 있다.
		// 바가지가 들어간다.
		
		os.write(data); // 바가지채로 출력버퍼에 고속출력(부어버림)
		
		os.flush(); // 출력 스트림의 버퍼 (****)
		
		os.close(); // 자원 (***)
		
	} // main

} // end class
728x90
댓글
«   2024/09   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30
최근에 올라온 글
Total
Today
Yesterday
공지사항