- append(CharSequence csq, int start, int end): csq의 start ~ end까지 출력하고 Writer를 리턴한다.
- flush(): 버퍼의 내용을 출력하고 버퍼를 비운다.
- close(): 스트림을 종료해서 자원을 반납한다.
File
- File(String pathname): pathname에 해당하는 파일을 생성한다. 이걸 안 넣으면 App를 시작한 경로로 설정한다.
- File(File P, String C): P경로 아래 C를 생성한다.
- File(URI uri): file로 시작하는 URI 객체를 이용해 파일을 생성
- CreateNewFile(): 물리적인 파일을 생성한다.
- getAbsolutePath(): 파일의 절대 경로를 출력한다.
- getCanonicalPath(): 파일의 정식 경로(절대 경로이며 .이나 ..같은 상대 경로 기호가 없는 경로)를 출력한다.
- ListFile(): 파일이 디렉터리일 경우 자식 파일들을 File [] 형태로 리턴한다.
- FileInputStream(String name): name 경로의 파일을 읽는 FIleInputStream을 생성한다.
- FileOutputStream(String name): name 경로의 파일에 출력하는 FIleOutputStream을 생성한다.
- FileOutputStream(String name, boolean append): 위와 동일, 기존 파일이 있으면 이어서 작성
보조 스트림
다른 스트림에 부가적인 기능을 제공하는 스트림이다.
필요에 따라 여러 보조 스트림을 연결해서 사용할 수 있다.(스트림 체이닝)
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine());
n = Integer.parseInt(st.nextToken());
m = Integer.parseInt(st.nextToken());
보조스트림의 BufferedReader를 이용하여 Input을 받는 예시 코드이다.
Scanner에 비해 속도가 빨라 알고리즘 문제 해결에 사용되기도 한다.
객체 직렬화
객체를 파일 등에 저장하거나 네트워크로 전송하기 위해 연속적인 데이터로 변환하는 것이다.
클래스에서 Serializable 인터페이스를 구현해야 하며, 직렬화를 원하지 않는 멤버는 transient를 선언하면 된다.
serialVersionUID: 클래스의 변경 여부를 파악하기 위한 유일 키로 직렬화 - 역직렬화 간 검증용으로 사용한다.
ObjectOutputStream(OutputStream out): out을 이용해 ObjectOutputStream 객체를 생성한다.
writeObject(Object obj): obj를 직렬화하여 출력한다.
ObjectInputStream(InputStream in): in을 이용해 ObjectInputStream 객체를 생성한다.
readObject(): 직렬화된 데이터를 역직렬화해서 Object로 반환한다.
private static File target = new File("c:/Temp/objPerson.dat ");
private static void write() {
Person person = new Person("흥길동2", "pass1234", "123-456", "seoul");
try (ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream(target))) {
oos.writeObject(person);
System.out.println("저장 완료!");
} catch (IOException e){
e.printStackTrace();
}
}
private static void read() {
try (ObjectInputStream ois = new ObjectInputStream(new FileInputStream(target))){
Object readed = ois.readObject();
if (readed != null && readed instanceof Person casted){
System.out.println("로딩 완료: " + casted);
}
} catch (IOException | ClassNotFoundException e){
e.printStackTrace();
}
}