IT 개발노트

JAVA 입출력(I/O) 알아보기 본문

기초튼튼/JAVA

JAVA 입출력(I/O) 알아보기

limsungju 2019. 2. 10. 18:35

1. 입출력(I/O)
1.1 입출력(I/O) 이란?

: I/O란 입력(Input)과 출력(Output)을 뜻한다. 컴퓨터한테 입력하는 것은 input이며, 컴퓨터가 어떤 것을 출력하는 것을 Output이라고 한다.

Input
- 파일 데이터를 '읽는다'
- 키보드의 데이터를 '읽는다'
- 네트워크상의 데이터를 '읽는다'

Output
- 파일에 데이터를 '쓴다'
- 모니터에 데이터를 '쓴다.(출력)'
- 네트워크상에 데이터를 '쓴다.(전송)'

1.2 JAVA 입출력 API(Input~, Output~)
- InputStream, OutputStream : 1byte 단위 (이미지, 동영상등의 데이터에 주로 사용)
- Reader, Writer : 2byte 단위 (문자열에 주로 사용)

1.2.1 InputStream 사용법
- InputStream (추상)클래스를 이용해서 객체를 만든다. 또는 다른 클래스의 메서드에서 반환(리턴)되는 타입 객체를 만든다.
- read()메서드를 이용해서 데이터를 읽는다.
- read(), read(byte[]) 두개의 메서드를 이용할 수 있다.

InputStream 객체
- read() : 1byte씩 읽는다. 속도가 느리다.
- read(byte[]) : Byte[] 만큼씩 읽는다. 속도가 빠르다.

예시

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
package sungju.Java.Test2;
 
import java.io.FileInputStream;
import java.io.InputStream;;
 
public class Test2 {
    public static void main(String[] args) {
        
        try {
            InputStream is = new FileInputStream("C:\\javalec\\workspace\\jain.txt");
            while(true) {
                int i = is.read();
                System.out.println("데이터 : " + i);
                if(i==-1)
                    break;
            }
        }catch(Exception e) {
            System.out.println(e.getMessage());
        }
    }
}



1.2.2 OutputStream 사용법
- OutputStream 클래스를 이용해서 객체를 만든다. 또는 다른 클래스의 메서드에서 반환(리턴)되는 타입 객체를 얻는다.
- write()메서드를 이용해서 데이터를 읽으면 된다.
- write(), write(byte[]), write(byte[], int, int) 세개의 메서드를 이용할 수 있다.
- write(byte[], int, int)는 데이터를 원하는 위치에서 원하는 숫자만큼 쓸 수 있다.

1.3 예외 처리와 close() 실행
- I/O를 하면서 반듯이 해야하는 예외처리가 있다. IOException 이다.
- I/O 작업 마지막은 close()로 외부연결을 끝내야 한다.
예시

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
package sungju.Java.Test2;
 
import java.io.FileOutputStream;
import java.io.OutputStream;
 
public class Test2 {
    public static void main(String[] args) {
        OutputStream os = null;
        
        try {
            os = new FileOutputStream("C:\\javalec\\workspace\\jaout.txt");
            String str = "오늘 날씨는 아주 좋습니다.";
            byte[] bs = str.getBytes();
            os.write(bs);
        } catch(Exception e) {
            System.out.println(e.getMessage());
        }finally {
            try {
                if(os != null) os.close();
            } catch(Exception e2) {
                
            }
        }
        
    }
}


1.4 텍스트 읽고 쓰기
: 읽고, 쓰기를 동시에 - 파일복사
- 파일을 읽고, 다른 파일에 쓰고, 결국은 파일 복사이다.
- 작업순서 : InputStream, OutputStream 준비 -> InputStream으로 읽어들인 데이터를 OutputStream으로 쓴다 -> 외부연결 close()함

1.5 DataInputStream, DataOutputStream - 문자열 읽고, 쓰기
: byte단위로 문자열을 처리하는 InputStream, OutputStream 보다 편리하게 고안된 클래스이다.
예시

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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
package sungju.Java.Test2;
 
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.io.OutputStream;
 
public class Test2 {
    public static void main(String[] args) {
        InputStream is = null;
        DataInputStream dis = null;
        
        OutputStream os = null;
        DataOutputStream dos = null;
        
        try {
            is = new FileInputStream("C:\\javalec\\workspace\\str.txt");
            dis = new DataInputStream(is);
            String str = dis.readUTF();
            
            os = new FileOutputStream("C:\\javalec\\workspace\\str_copy.txt");
            dos = new DataOutputStream(os);
            dos.writeUTF(str);
            
        } catch (Exception e) {
            
        } finally {
            
            if(dos != null) {
                try {
                    dos.close();
                } catch (Exception e2) {
                    
                }
            }
            
            if(os != null) {
                try {
                    os.close();
                } catch(Exception e2) {
            }
        }
        }
        
    }
}




'기초튼튼 > JAVA' 카테고리의 다른 글

제네릭스(Generics)  (0) 2019.02.12
스레드  (0) 2019.02.10
컬렉션이란  (0) 2019.02.07
예외처리  (0) 2019.01.30
내부 클래스란?  (0) 2019.01.29