1. JAVA I/O
1) 개요
- JAVA는 byte와 char 그리고 추가적으로 String 단위로 입력과 출력이 이루어진다.
단위 | abstract class(최상위 클래스) | 하위 클래스 |
byte | InputStream, OutputStream | FileInputStream, ObjectInputStream, FileOutputStream, ObjectOutputStream... |
char, String | Reader, Writer | FileReader, BufferedReader, FileWriter, PrintWriter... |
- 표준입/출력은 각각 키보드와 모니터로 대응되는 Method는 System.in과 System.out이다.
즉, 표준입력 : 표준출력 = 키보드 : 모니터 = System.in : System.out
2) 예시
- 키보드 입력 : InputStreamReader
InputStream is = System.in; // byte 단위 처리
InputStreamReader reader = new InputStreamReader(is); // byte 단위를 char(2byte) 단위로 읽도록 변환
BufferedReader br = new BufferedReader(reader); // char 단위를 한 line씩 문자열을 읽도록 변환
// BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
try{
String str = br.readLine();
} catch (IOException e){
e.printStackTrace();
} finally {
try {
if(br!=null) br.close();
} catch (IOException e){
e.printStackTrace();
}
}
- File 입력 : FileReader
File f = new FIle("경로"); // file의 meta data 제공
BufferedReader br = null;
FileReader reader = new FileReader(f); // file의 EOF는 NULL로 체크 가능
try{
br = new BufferedReader(reader);
String str = br.readLine();
} catch (FileNotFoundException e) {
...
} finally {
br.close();
}
- File 출력 : FileWriter
File f = new File("경로"); // new File("경로", true); 기존 file에 내용 추가
PrintWriter out = null;
try{
FileWriter wr = new FileWriter(f);
out = new PrintWriter(writer);
out.println("~");
// out.fflush();
} catch(IOException e){
...
} finally {
out.close();
}
buffer가 가득차지 않는다면 File에 buffer가 담은 data를 쓰지 않는다.
이에 따라 out.fflush();로 명시적으로 buffer를 비우며 File에 쓰거나,
마지막에 out.close(); 를 통해 File에 data가 쓰여질 수 있다.
2. 객체의 직렬화
- heap에 생성된 인스턴스 데이터를 file이나 network 전송 시 연속적인 데이터(byte data)로 변환하는 과정
- 인스턴스 데이터는 비영속성을 갖기 때문에 프로그램 실행이 종료되면 메모리에서 제거된다.
- 이에 따라 영속성을 가지기 위해서 직렬화를 통해 파일이나 네트워크를 통해 전달하는 방법을 사용한다.
- Serializable를 구현(implement)한 클래스만 가능하다. ex) String
class person implements Serializable{ ... }
public class Main{
public static void main(...){
File f = new File("경로");
objectOutputStream oos = null;
try {
FileOutputStream fos = new FileOutputStream(f);
oos = new ObjectOutputStream(fos);
oos.writeObject(new Person(...));
} catch(FileNotFoundException e){ ... }
catch(IOException e) { ... }
finally {
try{
oos.close();
} catch(...){...}
}
}
}
'CS > JAVA' 카테고리의 다른 글
[JAVA] Exception (0) | 2021.01.18 |
---|---|
[JAVA] Functional Interface, Stream, String, StringBuffer (0) | 2021.01.14 |
[JAVA] Collection API (0) | 2021.01.14 |
[JAVA] Anonymous class, Lambda Expression, Generics (0) | 2021.01.14 |
[JAVA] Abstract, Interface (0) | 2021.01.12 |