본문 바로가기
Java

입출력

by k0o9 2022. 5. 27.

I/O

  • Input과 Output의 약자로 입력과 출력, 간단히 입출력이라고 한다.
  • 컴퓨터 내부 또는 외부의 장치와 프로그램간의 데이터를 주고받는 것.

스트림

  • 데이터를 운반하는데 사용되는 연결통로
  • 단방향 통신만 가능하기 때문에 하나의 스트림으로 입력과 출력을 동시에 처리할 수 없다.
  • 입력을 위한 입력스트림, 출력을 위한 출력스트림이 존재한다.
  • 큐와 같은 FIFO구조

바이트 기반 스트림

  • InputStream, OutputStream이 있다.
  • 바이트 단위로 데이터를 전송하는 스트림

보조 스트림

  • 스트림의 기능을 보완하기 위해 제공.
  • 실제 데이터를 주고받지 않기에 데이터를 입출력할 수 있는 기능은 없다.
  • 스트림의 기능 향상 및 새로운 기능 추가

Buffer

  • 바이트배열을 사용해서 일정량의 데이터의 크기만큼 모아서 전송
  • 시스템 콜의 횟수가 줄어들어 성능상 이점이 생김.

Channel

  • 입력과 출력을 동시에 수행한다.
  • Selector와 연결되고, 하나의 Selector에 다수의 채널이 존재할 수 있다.
  • Blocking된 스레드를 깨우거나 다시 Blocking 할 수 있다.

InputStream과 OutputStream

  • 대표적 Byte Stream
  • 각각 입력과 출력을 담당
  • 모든 byteStream의 조상

Byte와 Character Stream

  • 문자와 byte 입출력단위를 보완하기 위해 생긴 보조스트림이 Character Stream이다.
    • byte 단위는 입출력이 1바이트 단위
    • 자바의 경우 문자가 2바이트
  • Character Stream은 입출력 단위가 문자 기반
  • 일반적으로 ByteStream에 비해 사용이 용이하고 편리한 기능이 많다.
  • 대부분의 ByteStream에 대응하는 클래스들이 있다.

표준 스트림

  • 표준 입력 스트림 : System.in, InputStream
  • 표준 출력 스트림 : System.out, PrintStream
  • 표준 오류 스트림 : System.err, PrintStream

파일 읽고 쓰기


import java.io.*;

public class FileReadTest {
    public static void main(String[] args) {
        //파일 객체 생
        File file = new File("파일 절대경로");
        try {
            //입력 스트림, 입력 버퍼 생성
            FileReader fileReader = new FileReader(file);
            BufferedReader br = new BufferedReader(fileReader);
            String line = "";

            //한줄 씩 읽기
            while((line = br.readLine())!=null) {
                System.out.println(line);
            }
            br.close();
        } catch (IOException e) {
            e.printStackTrace();
        }

    }
}
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;

public class FileWriteTest {
    public static void main(String[] args) {
        try {
            //파일 객체 생성
            File file = new File("파일 경로");
            BufferedWriter bw = new BufferedWriter(new FileWriter(file));

            if (file.isFile() && file.canWrite()) {
                //쓰기
                bw.write("Write 1 line");
                bw.newLine();
                bw.write("두번째 라인 추가");
                bw.newLine();
                bw.write("마지막 확인");
                bw.close();
            }
        } catch (IOException e) {
            System.out.println(e);
        }
    }
}

'Java' 카테고리의 다른 글

면접준비 - 자바  (0) 2022.10.17
에노테이션  (0) 2022.05.27
Enum  (0) 2022.05.27
Thread  (0) 2022.05.27
예외처리  (0) 2022.05.27