Java Part3 하 4.2 InputStream OutputStream

admin | | 조회 9


[주요 목차]

1. 스트림의 개념과 종류

2. InputStream과 OutputStream의 작동 원리

3. 실전 예제: 파일 입출력 구현하기


여러분, 프로그래밍을 하다 보면 데이터의 입출력이 정말 중요하다는 걸 느끼게 될 거예요. 특히 Java에서는 InputStream과 OutputStream을 통해 파일이나 데이터를 다루게 되죠. 이 글에서는 스트림의 기본 개념부터 시작해, InputStream과 OutputStream의 작동 방식, 그리고 실제로 파일 입출력을 구현하는 방법까지 쉽게 설명해 드릴게요. 처음 접하시는 분들도 이해할 수 있도록 최대한 쉽게 풀어볼게요. 이 글을 통해 Java의 입출력 처리에 대한 기초를 다질 수 있을 거예요. 그럼 시작해볼까요?


Java Part3 하  4.2 InputStream OutputStream - 실전 화면 1 - JavaJava Part3 하 4.2 InputStream OutputStream · 실전 화면 1

1. 스트림의 개념과 종류

입출력 처리에서 '스트림'이란 데이터의 흐름을 의미해요. 쉽게 말해, 데이터를 읽거나 쓰는 통로라고 생각하면 됩니다. Java에서는 스트림을 크게 두 가지로 나눌 수 있어요. 바로 InputStream과 OutputStream이에요.

InputStream은 외부에서 데이터를 읽어오는 역할을 하죠. 예를 들어, 파일이나 웹에서 정보를 가져올 때 사용해요. 반면, OutputStream은 데이터를 외부로 내보내는 역할을 합니다. 파일에 데이터를 쓰거나 다른 시스템에 보내는 경우에 해당해요. 이렇게 각각의 역할이 다르기 때문에, 우리가 어떤 작업을 하느냐에 따라 적절한 스트림을 선택해야 해요.

스트림은 바이트 단위로 데이터를 처리해요. 즉, 데이터를 한 번에 읽어오거나 쓸 수 있는 것이죠. 예를 들어, 10바이트를 읽어오라고 명령하면, 그에 해당하는 데이터를 메모리에 저장해요. 이 메모리를 '버퍼'라고 부르는데, 데이터를 임시로 저장하는 공간이에요. 이렇게 하면 속도도 빨라지고, 효율적인 입출력이 가능해져요.

스트림의 기본적인 구조를 이해했다면, 다음 단계로 InputStream과 OutputStream의 작동 원리를 살펴보도록 할게요.

Java Part3 하  4.2 InputStream OutputStream - 핵심 장면 2 - JavaJava Part3 하 4.2 InputStream OutputStream · 핵심 장면 2

2. InputStream과 OutputStream의 작동 원리

InputStream은 데이터를 읽어오는 과정에서 여러 가지 메소드를 사용해요. 예를 들어, 리드(read) 메소드를 사용하면 지정한 바이트 수만큼 데이터를 읽어올 수 있어요. 이때 중요한 것은 '포지션'이라는 개념이에요. 처음에는 포지션이 0인데, 데이터를 읽을 때마다 포지션이 이동하게 되죠.

반대로, OutputStream은 데이터를 외부로 내보낼 때 사용해요. 이때는 라이트(write) 메소드를 사용해서 데이터를 파일이나 다른 스트림으로 전송하죠. OutputStream의 경우, 버퍼링을 통해 효율성을 높일 수 있어요. 데이터를 한 번에 보내면 속도가 느려질 수 있기 때문에, 1차 메모리인 RAM을 활용해 버퍼에 저장한 후, 일정량이 쌓이면 한 번에 보내는 방식이죠.

이러한 방식은 특히 파일 작업에서 중요한데요. 파일은 2차 메모리에서 작업하기 때문에, 상대적으로 느리기 때문에 이런 버퍼링을 통해 성능을 개선할 수 있어요. 예를 들어, 데이터를 작성할 때는 Close 메소드를 호출하면 내부적으로 자동으로 플러시(flush) 처리가 되어서, 버퍼에 쌓인 데이터가 파일로 저장되죠. 이렇게 InputStream과 OutputStream의 작동 원리를 이해하면, 실제로 어떻게 데이터를 읽고 쓸 수 있는지 감을 잡을 수 있을 거예요.

Java Part3 하  4.2 InputStream OutputStream - 핵심 장면 3 - JavaJava Part3 하 4.2 InputStream OutputStream · 핵심 장면 3

3. 실전 예제: 파일 입출력 구현하기

이제 실제로 Java를 사용해서 파일 입출력을 구현해볼게요. 먼저, 파일 아웃풋 스트림을 사용해 파일에 데이터를 쓰는 예제를 살펴보죠. 파일 아웃풋 스트림을 생성할 때는 저장할 파일의 경로를 지정해야 해요. 예를 들어, "temp/test.dat" 같은 경로를 사용할 수 있죠.

이렇게 스트림을 생성한 후, 데이터를 바이트 배열로 만들어서 라이트 메소드를 통해 파일에 쓸 수 있어요. 예를 들어, byte[] data = {16, 32, 64};라는 배열을 만들고, outputStream.write(data);를 호출하면 해당 배열의 데이터가 파일에 저장됩니다. 이때, 플러시를 호출하지 않아도 Close 메소드를 호출하면 내부적으로 플러시가 실행되므로 걱정할 필요는 없어요.

반대로, 파일 인풋 스트림을 사용해서 작성된 파일의 내용을 읽어올 수 있어요. InputStream inputStream = new FileInputStream("temp/test.dat");와 같이 스트림을 생성한 후, 리드 메소드를 호출하면 파일의 내용을 읽어올 수 있죠. 이때, -1이 반환되면 파일의 끝을 의미하니, 이를 활용해 반복문으로 파일의 모든 내용을 출력할 수 있어요.

이렇게 InputStream과 OutputStream을 활용하면, Java에서 파일 입출력을 간단하게 구현할 수 있어요. 이때 주의할 점은 항상 예외 처리를 해주는 것이에요. 파일이 존재하지 않거나 권한이 없을 경우에 대비해 try-catch 문을 사용하는 것이 좋습니다.

이 글을 통해 Java에서 파일 입출력 처리의 기본을 이해하고, 실제로 구현할 수 있는 방법을 익혔길 바랍니다. 이제 여러분도 Java로 다양한 입출력 작업을 해보세요!


[자주 묻는 질문]

InputStream과 OutputStream의 차이점은 무엇인가요?

InputStream은 외부에서 데이터를 읽어오는 역할이고, OutputStream은 데이터를 외부로 내보내는 역할을 해요. 즉, InputStream은 파일이나 웹 등에서 데이터를 가져오는 데 사용되고, OutputStream은 파일에 데이터를 쓰거나 다른 시스템에 전송하는 데 사용됩니다.

Java에서 파일 입출력을 할 때 주의해야 할 점은 무엇인가요?

파일 입출력을 할 때는 항상 예외 처리를 해주는 것이 중요해요. 파일이 존재하지 않거나 접근 권한이 없을 경우를 대비해 try-catch 문을 사용해야 해요. 또한, 작업이 끝난 후에는 반드시 스트림을 닫아주어야 메모리 누수를 방지할 수 있습니다.

버퍼링이란 무엇이며, 왜 필요한가요?

버퍼링은 데이터를 일시적으로 저장하는 메모리 공간을 활용해, 입출력을 효율적으로 처리하는 방법이에요. 파일 작업은 2차 메모리에서 이루어지므로 상대적으로 느리기 때문에, 1차 메모리인 RAM을 활용해 데이터를 모으고 한 번에 처리함으로써 성능을 개선할 수 있습니다. 버퍼링을 통해 지연 시간을 줄이고, 전체적인 프로그램의 성능을 높일 수 있어요.

목록
글쓰기
한국 서버호스팅
전체보기 →

댓글 0

jpg/png/gif/webp/zip · 최대 100MB · 10개

리뷰

0
0건의 리뷰
5★
0
4★
0
3★
0
2★
0
1★
0
0/5000
아직 작성된 리뷰가 없습니다. 첫 리뷰를 남겨주세요!