Archives
Recent Posts
«   2024/10   »
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 31
Today
Total
관리 메뉴

안드로이드 개발자의 창고

[9일차 Java] 2ByteStream 본문

Computer/Java

[9일차 Java] 2ByteStream

Wise-99 2023. 5. 9. 19:51

 

 

출처 : 안드로이드 앱스쿨 2기 윤재성 강사님 수업 PPT

 

 

 

📖 2ByteStream이란?

  • 자바는 글자 하나를 2 byte를 사용하기 때문에 문자열 입출력 전용으로 사용하는 스트림들을 2byte stream이라고 부른다.
  • 라인 단위 입출력이 가능하고 문자열 인코딩 설정이 가능하다.
  • 2 바이트 입출력 스트림을 이용하면 키보드를 통해 입력을 받거나 콘솔로 송출할 때 편하게 할 수 있다.
  • 사용해야하는 필터 스트림이 좀 많은 편이긴 하지만 데이터를 라인 단위로 입출력할 수 있다는 편리성을 가지고 있어서 많이 사용한다.

 

📖 예제 전체 코드

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;

public class MainClass {
    public static void main(String[] args) {
		
        saveData();
        printData();
        loadData();
        keyboardInput();
    }
	
	public static void saveData() {
        try {
			
            // 기본 스트림 생성
            FileOutputStream fos = new FileOutputStream("test4.txt");
            
            // 문자열 인코딩을 설정하는 필터 스트림
            OutputStreamWriter writer = new OutputStreamWriter(fos, "UTF-8");
            
            // 출력 버퍼를 사용하는 필터 스트림
            BufferedWriter bw = new BufferedWriter(writer);
            
            // 라인 단위로 쓰는 필터 스트림
            // print, println, printf를 사용할 수 있는 필터 스트림
            
            // BufferedWriter로 전달됨
            PrintWriter pw = new PrintWriter(bw);
            
            // 파일에 쓴다.
            pw.print("안녕하세요");
            pw.println("반갑습니다");
            pw.printf("이름은 %s이고, 나이는 %d살 입니다\n", "홍길동", 30);
            
            pw.flush();
            pw.close();
            bw.close();
            writer.close();
            fos.close();
            
            System.out.println("쓰기 완료");
            
        } catch(Exception e) {
            e.printStackTrace();
        }
	}
	
	public static void printData() {
		try {
			// 기본 출력(터미널)에 인코딩을 설정할 수 있도록 한다.
            OutputStreamWriter writer = new OutputStreamWriter(System.out, "utf-8");
            BufferedWriter bw = new BufferedWriter(writer);
            PrintWriter pw = new PrintWriter(bw);
            
            pw.print("안녕하세요");
            pw.println("반갑습니다");
            pw.printf("이름은 %s이고, 나이는 %d살 입니다","홍길동", 30);
            
            pw.flush();
            pw.close();
            bw.close();
            writer.close();
            
        }catch(Exception e) {
            e.printStackTrace();
        }
	}
	
	public static void loadData() {
		try {
			FileInputStream fis = new FileInputStream("test4.txt");
            // 인코딩 설정
            InputStreamReader irs = new InputStreamReader(fis, "UTF-8");
            // 입력 버퍼 사용
            BufferedReader br = new BufferedReader(irs);
            
            // 읽어온다.
            String str1 = null;
            StringBuffer buffer = new StringBuffer();
            
            do {
                // 한 줄을 읽어온다.
                str1 = br.readLine();
                if(str1 != null) {
                	buffer.append(str1 + "\n");
                }
            } while(str1 != null);
            
            br.close();
            irs.close();
            fis.close();
            
            // StringBuffer의 문자열로 String을 만든다.
            String result = buffer.toString();
            System.out.println(result);
            
            
        }catch(Exception e) {
            e.printStackTrace();
        }
	}
	
	public static void keyboardInput() {
		try {
			InputStreamReader isr = new InputStreamReader(System.in, "UTF-8");
            BufferedReader br = new BufferedReader(isr);
            System.out.print("입력1 : ");
            String str1 = br.readLine();
            System.out.print("입력2 : ");
            String str2 = br.readLine();
            
            br.close();
            isr.close();
            
            System.out.println(str1);
            System.out.println(str2);
			
		} catch(Exception e) {
			e.printStackTrace();
		}
	}
}

 

✔️ 코드 해석

public static void saveData() {
        try {
			
            // 기본 스트림 생성
            FileOutputStream fos = new FileOutputStream("test4.txt");
            
            OutputStreamWriter writer = new OutputStreamWriter(fos, "UTF-8");
            BufferedWriter bw = new BufferedWriter(writer);
            PrintWriter pw = new PrintWriter(bw);
            
            // 파일에 쓴다.
            pw.print("안녕하세요");
            pw.println("반갑습니다");
            pw.printf("이름은 %s이고, 나이는 %d살 입니다\n", "홍길동", 30);
            
            pw.flush();
            pw.close();
            bw.close();
            writer.close();
            fos.close();
            
            System.out.println("쓰기 완료");
            
        } catch(Exception e) {
            e.printStackTrace();
        }
    }
  • 문자열을 인코딩을 설정하는 필터 스트림인 OutputStreamWriter를 사용한다.
    • 해당 코드를 통해 "UTF-8"로 인코딩한다.
  • BufferedWriter bw를 선언하여 출력 버퍼를 사용한다.
  • 파일을 작성하기 위해 PrintWriter pw를 선언한다.
  • pw.~~~("문자열");
    • pw.print("안녕하세요") : 줄바꿈 없이 입력한다.
    • pw.println("반갑습니다") : 문자열 입력 후 줄바꿈한다.
    • pw.printf("이름은 %s이고, 나이는 %d살 입니다\n", "홍길동", 30) : escape 문자로 형식을 지정하여 저장한다.

 

 

public static void printData() {
		try {
            OutputStreamWriter writer = new OutputStreamWriter(System.out, "utf-8");
            BufferedWriter bw = new BufferedWriter(writer);
            PrintWriter pw = new PrintWriter(bw);
            
            pw.print("안녕하세요");
            pw.println("반갑습니다");
            pw.printf("이름은 %s이고, 나이는 %d살 입니다","홍길동", 30);
            
            pw.flush();
            pw.close();
            bw.close();
            writer.close();
            
        }catch(Exception e) {
            e.printStackTrace();
        }
	}
  • FileOutputStream를 선언하지 않았다.
    • new OutputStreamWriter(System.out, "utf-8")를 통해 console에 출력하도록 한다.
    • 파일을 생성하여 저장하는 loadData와 유사하다.

 

 

 

public static void loadData() {
		try {
			FileInputStream fis = new FileInputStream("test4.txt");
            InputStreamReader irs = new InputStreamReader(fis, "UTF-8");
            BufferedReader br = new BufferedReader(irs);
            
            String str1 = null;
            StringBuffer buffer = new StringBuffer();
            
            do {
                str1 = br.readLine();
                if(str1 != null) {
                	buffer.append(str1 + "\n");
                }
            } while(str1 != null);
            
            br.close();
            irs.close();
            fis.close();
            
            String result = buffer.toString();
            System.out.println(result);
            
            
        }catch(Exception e) {
            e.printStackTrace();
        }
	}
  • test4.txt(saveData())에서 생성한 파일)을 열어 "UTF-8"로 인코딩한다.
  • 빈 문자열 str1을 선언하고 do-while문을 통해 한 줄씩(readLine()) 가져온다.
  • StringBuffer buffer에 str1을 저장한다.
  • result라는 String형 변수에 buffer에 담긴 문자열을 String으로 변환하여 담는다.

 

 

 

public static void keyboardInput() {
		try {
			InputStreamReader isr = new InputStreamReader(System.in, "UTF-8");
            BufferedReader br = new BufferedReader(isr);
            System.out.print("입력1 : ");
            String str1 = br.readLine();
            System.out.print("입력2 : ");
            String str2 = br.readLine();
            
            br.close();
            isr.close();
            
            System.out.println(str1);
            System.out.println(str2);
			
		} catch(Exception e) {
			e.printStackTrace();
		}
	}
  • 코드로 입력하는 것이 아닌 키보드를 통해 한 줄씩 입력 받는다.

'Computer > Java' 카테고리의 다른 글

[10일차 Java] Network  (0) 2023.05.10
[Java 9일차] ObjectStream  (0) 2023.05.09
[9일차 Java] DataStream  (0) 2023.05.09
[9일차 Java] FileStream  (0) 2023.05.08
[8일차 Java] Collection / List / Map / Set  (0) 2023.05.07