# inputStream/OutputStream
- byte 단위로 데이터를 입/출력하는 클래스
- 쓸 때는 데이터를 byte 형태로 분해해서 써야한다
- 읽을 때는 읽은 byte를 합쳐서 데이터를 만들어서 써야한다
# Reader/Writer
- char 단위로 데이터를 입/출력하는 클래스
- 쓸 때는 알아서 char를 byte로 분해해준다 (직접 분해할 필요가 없다)
- 읽을 때는 알아서 byte를 합쳐서 char 형태로 우리에게 제공해준다
Writer로 파일에 데이터를 쓸 때
FileWriter out = null;
try {
out = new FileWriter("myfiles/test2.txt");
write() : 맨 뒤에 쓴다
out.write('한');
out.write('글');
out.write('\n');
for (int i = 0; i < 100; ++i) {
out.write("Write로 문자열도 쓸 수 있습니다.\n");
}
char[] 을 쓸 수도 있다
char[] arr = {'a', 'b', 'c', 'd', 'e', 'f', '\n'};
out.write(arr);
char[] 에서 원하는 만큼을 쓸 수 있다
out.write(arr, 2, 5);
append() : 맨 뒤에 추가한다
out.append("문자열도 잘 들어갑니다");
} catch (IOException e) {
e.printStackTrace();
}
finally에 close()를 하여 스트림이 안닫힐 확률을 없앨 수 있다
finally {
try {
if (out != null) {
out.close();
}
} catch (IOException e) {
e.printStackTrace();
}
}
Reader로 읽기
FileReader in = null;
try {
in = new FileReader("myfiles/test2.txt");
한 글자(char단위)씩 읽기. 더 읽을게 없으면 -1을 반환
int ch;
int i = 0;
while ((ch = in.read()) != -1) {
System.out.printf("%d번째 문자: %c\n", i++, ch);
System.out.print((char)ch);
}
여러 글자씩 읽기. 기본적으로는 읽은 문자의 개수를 반환, 읽을게 없으면 -1 반환
버퍼를 사용해 print() 메서드를 호출하는 횟수가 줄어들어 성능이 향상될 수 있다
char[] buff = new char[100];
int len;
while ((len = in.read(buff)) != -1) {
System.out.printf("%s(len:%d)\n",
new String(buff, 0, len), len);
}
똑같이 닫아주고 마무리
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
if (in != null) {
in.close();
}
} catch (IOException e) {
e.printStackTrace();
}
}