System.setIn(new FileInputStream("src/algo0823/input_1247.txt"));
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
SWEA 문제를 푸는데 input이 보통 txt파일로 주어지더라..
이참에 미루고 미루던 버퍼리더를 사용해보자는 생각이 들어서 공부했다
앗 쉽다쉬워 파일입출력!!
데이터는 한쪽에서 주고 한쪽에서 받는 구조로 되어있음. 따라서 두 노드를 연결해서 데이터를 전송할 수 있는 개념을 만들었는데 이를 스트림이라고 한다! 스트림은 단방향 통신만 지원하며 하나의 스트림으로 입출력을 둘 다 처리할 수는 없다.
스트림의 종류를 나눠보자면
1. 데이터 타입에 따라(byte or char) XXStream / XXer로 나뉘고
2. 방향에 따라(입력 or 출력) InputStream/OuputStream과 Reader/Writer 으로 나뉘고
3. 노드 타입에따라 키보드는 InputStream, 파일은 FileInputStream, .... 이런식으로 분류된다.
이름 보고 느낌만 알면 된다.
객체를 직렬화 하여 파일로 저장하거나 불러올 수 있다. 네트워크로 전송할 수도 있다.
// 0. 직렬화를 통해 파일<->객체 가능하게 하기
class Animal implements Serializable {}
// 1. 파일이 없는상태에서 파일 쓰기
public void saveData() throws IOException {
String src = "data.dat";
FileOutputStream fos = new FileOutputStream(src);
ObjectOutputStream oos = new ObjectOutputStream(fos);
oos.writeObject(animals); //animals는 List<Animal>이다
}
// 2. 어쩌고.dat 형태의 데이터파일을 읽어오는 메소드
private void loadData() throws IOException, ClassNotFoundException {
String src = "data.dat";
FileInputStream fis = new FileInputStream(src);
ObjectInputStream ois = new ObjectInputStream(fis);
Object obj = ois.readObject();
Animals (List<Anumal>) obj;
}