I/O
public Class MainClass{
public static void main(String[] args){
try {
}
}
input과 output으로 컴퓨터에 입력하는게 input, 컴퓨터가 출력하는것이 output이다.
앞에서 줄기차게 봤던 System.out.println(); 구문이 output이다.
앞으로 어떤 데이터를 읽는다면 input이라 생각하면 되고, 데이터를 '쓴다'면 output이라 생각하면 된다.
입출력 API
InputStream, Reader & OutputStream, Writer
byte 단위로 나뉜다.
- InputStream, OutputStream : 1byte단위로 이미지, 동영상등의 데이터에 주로 사용한다.
- Reader, Writer : 2byte단위로 문자열에 주로 사용한다.
InputStream
1) InputStream 추상클래스를 이용해 객체를 만든다. 또는 inputstream을 상속받은 다른 클래스의 메소드에서 반환되는 타입 객체를 얻는다2) read() 메소드를 이용해 데이터를 읽는다.- read() 메소드 : 1byte씩 읽으며 속도가 좀 느리다.- read(byte[]) 메소드 : Byte[] 만큼씩 읽어서 속도가 빠르다.
inputStream를 상속받는 클래스가 매~~ 우 많이있다.
그중 하나가 file을 읽는데 많이 쓰이는 FileinputStream이다. 그 밖의 다양한 클래스들은 API 문서를 참고하자
import java.io.FileInputStream;
import java.io.InputStream;
public class MainClass{
public static void main(String[] args){
try {
InputStream is = new FileInputStream("경로")
while(true){
int i = is.read();
System.out.println("데이터 :" + i);
if(i==-1) break;
}
}catch(Exception e){
System.out.println(e.getMessage());
}
}
}
}
I/O 다룰때 Java에선 예외처리(try~catch / throws)를 강요한다. 참고하도록하자.
OutputStream
1) OutputStream 추상클래스를 이용해 객체를 만들거나, 상속받은 클래스의 메소드로 타입객체를 얻어도 된다. inputstream과 동일
2) write() 메소드를 이용 가능하다
- write()
- write(byte[])
- write(byte[],int,int) : 위의 두개는 input과 입력이냐 출력이냐의 차이정도로 보면 되고 이건 from 첫번째int to 두번째int 로 출력한다고 보면된다.
강사님의 설명으론 5byte씩 읽으며 처리하다가 맨 마지막부분에는 그보다 작은 3byte의 데이터만 읽는 경우를 예시로 들었다. 그런 경우에 5byte를 다 처리할것 없이 write(byte[3],0,2) 로 출력시킨다면 더 효율적일것이다
public static void main(String[] args){
try {
OutputStream os = new FileOutputStream("경로")
String str = "오늘은 날씨가 추워용~~.";
byte[] bs = str.getByte(); //문자열의 byte를 배열로 반환하는 String의 메소드 getByte 사용
os.write(bs);
}catch(Exception e){
System.out.println(e.getMessage());
}
}
}
OutputStream도 마찬가지로 예외처리를 해줘야한다.
예외처리와 무조건 close()실행
I/O를 하면서 반드시 해야하는 예외처리는 IOException이다. 또한 파일(혹은 데이터)와의 연결을 끊어주지 않으면 계속 연결되어있는 상태가 유지된다. 따라서 close() 메소드를 이용해 연결 종료를 시켜줘야한다.
public static void main(String[] args){
OutputStream os = new FileOutputStream("경로")
try {
String str = "오늘은 날씨가 추워용~~.";
byte[] bs = str.getByte(); //문자열의 byte를 배열로 반환하는 String의 메소드 getByte 사용
os.write(bs);
}catch(Exception e){
System.out.println(e.getMessage());
}finally{
try{
if(os!=null)os.close()
}catch (IOException e){
System.out.println(e.getMessage());
}
}
}
위의 예제를 보면 finally를 이용해 close처리를 해주고 오류 발생시 IOException 처리를 하도록 예외처리까지 추가하였다.
DataInputStream / DataOutputStream
byte단위로 문자열 처리하던 inputStream Outputstream보다 편리하게 고안된 클래스다
while문이나 배열을 이용해 짜잘하게 데이터를 얻어오는게 아니라 한방에 얻어오는 기능이라고 생각하면 된다.
객체생성을 하고 읽고 쓸때 readUTF / writeUTF 메소드를 써주면 된다. (그외의 기본적 동작은 거의 똑같다고 봐도 된다)
다음시간은 JAVA 스레드에 대해서 살펴볼것이다.
출처 : 신입SW인력을 위한 실전 자바(by 블스)
'Programming > Java' 카테고리의 다른 글
17. JAVA 그래픽 (0) | 2021.01.17 |
---|---|
16. 스레드(Thread) (0) | 2021.01.16 |
14. JAVA Collections (0) | 2021.01.15 |
13. 예외처리 (0) | 2021.01.13 |
12. API (0) | 2021.01.11 |