JAVA IO - 깔끔하게 정리 필요
Programmers 자바 중급 과정
1. Java IO는 데코레이터 패턴으로 구성
2. 표준 입력
A. System.in (키보드, InputStream)
3. 표준 출력
A. System.out (모니터, PrintStream)
4. 표준 에러 출력
A. System.err (모니터, PrintStream)
5. Java IO는 byte단위 입출력과 char단위 입출력이 있다.
A. byte단위 입출력 – 클래스 이름이 Stream으로 끝난다.
i. 입력 – OOO InputStream
ii. 출력 – OOO OutputStream
B. char단위 입출력 – 클래스 이름이 Reader, Writer로 끝난다.
i. 입력 – OOO Reader
ii. 출력 – OOO Writer
6. Java IO는 추상클래스인 InputStream, OutputStream, Reader, Writer중 하나를 상속 받는다.
7. 장식에 해당하는 클래스는 생성자에 InputStream, OutputStream, Reader, Writer클래스를 파라미터로 받아들인다.
A. 생성자에 무엇인가 넣어준다는 것은 가진다는 의미
B. InputStream을 받아들인다는 것은 InputStream의 자손이나 후손 중에서 인스턴스틑 받아들인다는 뜻이다. InputStream 자체는 객체를 생성 할 수 없는 추상클래스이기 때문에 들어오지 않는다.
C. 조상으로 타입을 정하면 후손들은 전부 다 받아들일 수 있다.
i. Eg) Car c1 = new Bus();, Car c2 = new SUV();….
8. 주인공은 InputStream, OutputStream, Reader, Writer클래스를 파라미터로 받아들이지 않는다.
9. Java IO에서 주인공은 어디에서 읽어 들일 것인가, 어디에다 쓸 것인가를 결정
A. FileInputStream – “파일로부터” 읽어들인다.
B. ByteArrayOutputStream – “바이트배열에” 저장한다.
10. 주인공은 간단한 메소드만 가지고 있다.
키보드로부터 입력한 값은 System.in(InputStream(read라는 메소드를 가지고 있다 (byte단위로 읽는다)))을 통해 받아들인다.
InputStreamReader는 InputStream을 파라미터로 받아들여서(InputStreamReade의 생성자로 System.in을 넣어주었다) 문자단위로 입력 받는다(리턴해준다)
InputStreamReader에서 Read란 메소드를 호출하면 내부적으로 InputStream의 Read를 이용하여 InputStreamReader의 Read로 나오게 된다.
InputStreamReader를 Buffer(메모리)를 가지고 있는 BufferedReader에 넣어준다.
BufferedReader는 내부적으로 InputStreamReader의 Read를 사용하고 BufferedReader는 ReadLine이라는 메소드를 사용한다.
--------------------------------
12월 27일 강의 내용
JAVA IO
File file = new File(filename);
파일 관련된 작업을 수행 할 수 있다.
프로그램은 입출력이 기본.
유닉스 환경에선 모든 입력을 파일로 본다
- 입력
o 키보드, 파일, 메모리,(eg 배열), 네트워크…
- 출력
o 화면, 파일, 메모리, 네트워크…
특수한 IO
주인공 – 어디서 읽고 어디에 쓸지 정한다.
- 항상 열려 있다. 닫을 필요가 없음.
- System.out : 표준 출력 PrintStream – 화면
- System.in : 표준 입력 InputStream – 키보드
- System.err : 표준 에러 출력 PrintStream – 화면
- 리다이렉션 기호를 사용해서 출력과 입력 방향을 바꿀 수 있다.
유닉스 계열 ‘>’ 리다이렉션 기호 -> 표준 출력을 out.txt에 저장
‘2>’ 표준 에러 출력은 error.txt에 저장
유닉스 계열 ‘>>’ append operator -> 기존 파일에 추가
BufferedReader -장식 -> readLine() 한줄 씩 입력 받는 메소드.
|
|
|
|
|
|
|
|
1바이트는 8비트
음수를 구하는 방법은 1의보수를 구해서 1을 더해준다.
가장 왼쪽의 비트는 부호비트라 한다.
- 0이면 양수
- 1이면 음수
추상 클래스
Java IO에서 중요한 4가지 추상 클래스
Java IO는 byte단위 입출력과 char단위 입출력이 있다.
byte단위 -> 1byte씩 -> 최소 입출력 단위
char단위 -> 2byte씩 -> 사람이 보는 문자를 입출력 할 때 사용한다. -> 다만 Byte단위로도 입출력이 가능하다.
- InputStream – Byte를 읽어들이기 위한 Stream.
- OutputStream – Byte를 쓰기위한 Stream
- Reader – char를 읽어들이기 위한 Stream.
- Writer – char를 쓰기 위한 Stream.
위의 추상 클래스는 1개 또는 배열 단위로 읽고 쓰는 메소드를 가지고 있다.
주인공과 장식으로 나뉜다.
- 위의 4가지 추상 클래스를 상속받는 클래스 중 4가지 추상 클래스 중 하나를 받아들이는 생성자가 있는 클래스는 장식
주인공
- 어디에서 받아서 어디에 쓸것인가를 결정하는 클래스
장식
- 어떤 방법으로 읽고 어떤 방법으로 쓸 것인가를 결정하는 다양한 메소드를 제공하는 클래스.
생성자에 값을 넣어주는 것은 가지라는 의미.
Composite 패턴과 비슷하지만 장식클래스를 상속받는 다른 클래스들이 있을 수 있다.
- Decorator 패턴
- ‘재귀’가 아닌 ‘가진다’는 관계
내 소개를 하는 HTML파일과 CSS 파일 만들어 오기
HTML, CSS, IMG 파일 필요
로 보내기
HTTP프로토콜에 관하여 공부하기
쓰레드 공부
---------
객체 직렬화
1. 컴퓨터의 최소 저장 단위는 byte
2. 어떤 객체가 byte의 흐름으로 전송이 되어 전송된 바이트를 원래 상태로 만든다.
3. 객체직렬화란 -> 객체를 byte의 흐름으로 만들어서 전송해 어딘가에 사용하는 것
4. 그러기 위해선 특별한 인터페이스를 구현해야한다.
5. Serializable 인터페이스는 메소드가 없다.
A. 마크 인터페이스: 메소드가 없는 인터페이스.
6. 직렬화가 가능한 객체?
A. Serializable 인터페이스를 구현하고 있거나
B. 기본형 Boolean, byte, shoty, int, long, float, double, char
7. 객체가 가지고 있는 필드들의 type도 직렬화가 되어야 한다.
8. 객체 직렬화의 장점은 객체를 통째로 저장하고 통째로 읽어오는 것
File Class
1. 파일 이름을 넣을 때는 절대경로와 상대경로에 대하여 이해 할 필요가 있다.
A. 절대경로 : C:\...드라이브 이름으로 시작
B. \로 시작한다.
C. 상대경로 : 현재 JVM이 실행되는 경로를 기준으로 한다.