Java

자바 입출력 완전 이해하기

최종군 2024. 7. 7. 17:06

 

Java를 배우면서 가장 먼저 접한 입출력은 

Scanner 클래스와 print 메소드이다 

자바 API를 배우면서 많이 사용을 한 입출력이다 

 

표준 입출력 

InputStream is = System.in;    
OutputStream os = System.out;   

 

 

System.err: 표준 에러 스트림 (콘솔 에러 출력)

 

 

자바에서 IO(입력과 출력)은 stream을 통해서 이루어진다.

stream은 빨대와 같다 입력과 출력을 동시에 수행할 수 없어

단일 방향으로만 가능하다 

 

 

입력과 출력을 동시에 수행하려면 

두 개의 stream이 필요하다

 

그리고  Fist in First Out 방식으로 이루어져 있다 

먼저 들어온 데이터가 먼저 나가는 방식이다 

 

 

stream 종류 : 

 

 

바이트 스트림 (Byte Stream)

 입력 스트림 (Input Stream)

InputStream: 바이트 단위로 데이터를 읽기 위한 최상위 클래스.

  • FileInputStream: 파일로부터 바이트 데이터를 읽기 위한 클래스.
  • ByteArrayInputStream: 메모리에 있는 바이트 배열로부터 데이터를 읽기 위한 클래스.
  • DataInputStream: 기본 데이터 타입 (int, double, boolean 등)을 읽기 위한 클래스
  • BufferedInputStream: 입력 성능을 향상시키기 위해 버퍼링 기능을 제공하는 클래스.
  • ObjectInputStream: 객체 단위로 데이터를 읽기 위한 클래스. 직렬화된 객체를 읽어올 때 사용.

 

출력 스트림 (Output Stream)

  • OutputStream: 바이트 단위로 데이터를 쓰기 위한 최상위 추상 클래스.
    • FileOutputStream: 파일로 바이트 데이터를 쓰기 위한 클래스.
    • ByteArrayOutputStream: 메모리에 바이트 배열로 데이터를 쓰기 위한 클래스.
    • DataOutputStream: 기본 데이터 타입 (int, float 등)을 쓰기 위한 클래스.
    • BufferedOutputStream: 출력 성능을 향상시키기 위해 버퍼링 기능을 제공하는 클래스.
    • ObjectOutputStream: 객체 단위로 데이터를 쓰기 위한 클래스. 직렬화된 객체를 저장할 때 사용.

 

 

문자 스트림 (Character Stream)

입력 스트림 (Reader)

  • Reader: 문자 단위로 데이터를 읽기 위한 최상위 추상 클래스.
    • FileReader: 파일로부터 문자 데이터를 읽기 위한 클래스.
    • StringReader: 문자열로부터 문자 데이터를 읽기 위한 클래스.
    • BufferedReader: 입력 성능을 향상시키기 위해 버퍼링 기능을 제공하는 클래스. readLine() 메소드로 한 줄씩 읽는 기능 제공.
    • InputStreamReader: 바이트 스트림을 문자 스트림으로 변환하기 위한 클래스. 인코딩을 지정할 수 있음.

 

출력 스트림 (Writer)

  • Writer: 문자 단위로 데이터를 쓰기 위한 최상위 추상 클래스.
    • FileWriter: 파일로 문자 데이터를 쓰기 위한 클래스.
    • StringWriter: 메모리에 문자열로 데이터를 쓰기 위한 클래스.
    • BufferedWriter: 출력 성능을 향상시키기 위해 버퍼링 기능을 제공하는 클래스.
    • OutputStreamWriter: 바이트 스트림을 문자 스트림으로 변환하기 위한 클래스. 인코딩을 지정할 수 있음.

 

 

* Buffered 역할 : 

 

Buffered는 보다 빠르고 안정적이게 입출력의 효율성을 높여준다 

Buffered를 사용하지 않는 경우에는 데이터가 FIFO 방식대로 하나씩 

여러 번 입출력을 하게되는데 

Buffered 같은 경우에는 한 번에  여러 개를 읽게된다

 

쉽게 예를 들면 한 백반집에서는 반찬 5가지가 있고 한 곳에서는 반찬 7가지가 

있는 곳이 있다 만일 반찬이 나오는 대로 하나씩 들고가서 손님에게 전해주면 

두 식당에서 손님한테 반찬이 온전히 전해지는데는 시간 차이가 있다 

하지만 반찬이 나와서 쟁반 위에 각 반찬들을 올려두고 전해주게 된다면 

비교적 같은 시간에 전해지게 된다 이때 쟁반 역할을 하는 것이 바로

Buffered 이다  

 

* Buffered는 이처럼 효율적으로 그리고 시간을 줄일 수 있다 

 

 

 

import java.io.File;

public class Main {
    public static void main(String[] args) {

        File f = new File("C:/test.txt");
        // 파일 정보를 다루는 클래스이다

 

File 클래스는 파일 정보를 다루는 클래스이다.

여기서 주의할 점은 파일 정보를 다룬다고 해서 파일이 생성이 되는 게 아니다 

 

System.out.println("> " + f);
// 파일의 경로가 출력이 된다

 

 

System.out.println("exists : " + f.exists());

 

f 객체의 담긴 파일의 경로가 존재한다면 true를 존재하지 않는다면 false를 출력한다 

System.out.println("canRead : " + f.canRead());
System.out.println("canWrite : " + f.canWrite());
// 파일을 읽을 권한과 쓰기 권한이 있는 지 확인 

 

 

 

'Java' 카테고리의 다른 글

자바 변수부터 콜랙션까지 내용 정리  (0) 2024.07.10
자바 Collection List, Set  (0) 2024.07.09
클래스, 상속  (0) 2024.07.06
KH 교육과정 제네릭  (0) 2024.07.04
KH 교육과정 JAVA_IO(입출력)  (0) 2024.07.03