Frog is cry
Day19 본문
"복습"
바이트기반 스트림
바이트기반 보조스트림
InputStream
OuputStream
문자기반 스트림
문자기반 보조스트림
Writer
Reader
====================
* keyword
- PrintStream
- File 클래스
- 파일입출력 실습
: 전화번호부
-카페 영수증 출력
====================
[PrintStream]
: 데이터 기반 스트림의
다양한 형태로 출력할 수 있도록
출력과 관련된 기능(메서드)을 제공
*제공하는 메서드
- print(출력값): 값을 문자로 출력
- println(출력값):
문자를 출력하며 마지막에 줄바꿈 문자 자동 출력
- printf("형식지정자",출력값)
: 정해진 형식대로 출력값을 출력
* System.out
out은 PrintStream의 객체변수다
그렇기 때문에 모니터에 출력시
위 메서드를 사용할 수 있다.
<실습>PrintStreamEx.java
파일입출력 시, PrintStream을 사용해보자
========================
[File 클래스]
: 파일 관리를 위한 기능 제공
- 제공하는 메서드
- length() :파일의크기 반환
- getName():파일명
- getPath(): 파일의 경로
- getParent():부모디렉터리를 문자열로 반환
- isFile(): 파일 타입판별
- list(): 지정한 경로에 있는 모든 파일을
String[]로 가져옴
- File 객체 생성
File f = new File("파일경로");
<실습>FileManagerEx.java
- 바탕화면\\hello.txt
=================
[입출력 스트림 사용시 발생할 수 있는 예외]
입출력의 모든 메서드는
IOException 발생할 가능성이 있기 때문에
반드시 예외처리를해야함
1) FileNotFoundExcepton
404 page
: 파일을 찾을 수 없을 떄 발생 오류
2) IOException
입출력에 관련한 오류
->write(), read()시 처리
=======================
문자열 분리
"123;abc"
문자열.length()
배열.length
1) String 클래스 사용
문자열.split("구분문자");
String [] 반환
<실습>SplitTest.java
-> split(한개의분리문자)
-> 여러개의 구분문자를 사용하고 싶다면?
2) StringTokenizer 클래스
StringTokenizer
st = new StringTokenizer(str,tokenWord);
* 제공하는 메서드
nextToken()
: 다음 토큰 가져와
hasMoreTokens()
: 가져올 토큰이 있으면 true, 없으면 false
<실습>StringTKEx.java
==================
<실습>
[view]
PhoneBookMain.java
1) 메인화면출력
☆★☆★전화번호부 프로그램☆★☆★
1. 사용자 정보 저장
2. 사용자 정보 출력
3. 사용자 정보 검색
4. 끝내기
2) 세부기능
(1) 사용자 정보 저장
-UserManager의메서드();
(2) 사용자 정보 출력
-UserManager의메서드();
(3) 사용자 정보 검색
- UserManager의메서드();
<controller>
UserManager.java
-----------------------------
사용자 정보저장( )
- 키보드로 입력받는 작업
- User 객체에 저장
- FileManager의 파일쓰기(객체);
- 저장완료! 출력 메인으로 돌아감
-----------------------------
사용자 정보출력()
- 객체배열=FileManger의 파일읽기();
-
반복: 객체배열의 요소.info()
-----------------------------
사용자정보검색()
- 검색할 이름 입력받아 저장
- 객체배열=FileManger의 파일읽기();
-
반복: 객체배열의요소.name.equals(검색할이름)
만약 동일하다면, 객체배열의요소.info()
return;
만약 동일하지 않을 경우,
print("검색한 이름이 없습니다");
==============
<model>
FileManager.java
파일쓰기(사용자 객체)
write(객체.변수)
write('\t')
write(객체.변수)
..
write(\n)
파일읽기()
- 파일에서 전체 데이터를읽어옴
(단,보조스트림사용하기)
- 이름,나이,성별,전화번호
문자열을 끊어서
User객체배열의 각각 저장
return User[]
=================
User.java
- 변수
이름: String
나이: int
성별: String
전화번호:String(010-1111-1111)
- 메서드:info()
사용자 정보출력( )
=====================
[객체 직렬화]
직렬화(serialization)란?
: 자바 시스템 내부에서 사용하는
데이터를
다른 외부의 시스템에서 사용할 수 있도록
바이트 단위의 데이터로 변환시키는기술
객체직렬화?
객체를 직렬화하여 전송 가능한 상태로 만드는 것
* 사용목적?
: 객체 자체를 통째로 파일로 저장하거나
전송하고 싶을 때 주로 사용
- 역직렬화(Deserialization)란?
: 직렬화된 파일 을 역으로 다시
객체의 형태로 만드는 것
저장된 파일을 읽거나 전송된 스트림 데이터를
다시 원래 객체의 형태로 복원
* 객체 전송의 단계?
1) 직렬화된 객체를 바이트 단위로 분해
: 마샬링(marshalling)
2) 직렬화해서 분해된 데이터를 순서에 따라 전송
3) 전송받은 데이터를 다시 복구
: 언마샬링(unmarshalling)
--------------------
<마샬링:marshalling>
: 데이터를 바이트(byte)단위의 데이터로
변환시키는 작업을 의미
- 자바에서 마샬링이 가능한 데이터?
원시자료형(boolean,int, char,..)
Serializable 인터페이스를 구현한 클래스로 만들어진 객체
ObjectOutputStream 클래스를 사용
<언마샬링:unmarshalling>
: 스트림을 통해 전달된 바이트(byte)단위의 데이터를
다시 객체로 복원하는 작업
- 주의할점!
어떤 객체로 복구할지 반드시 형 변환을 정확하게 해야함
ObjectInputStream클래스를 사용
* 직렬화 가능한 클래스 만들기
class 클래스명 implements Serializable{
변수=값;
변수=값;
}
class User{
id
pw
name
}
'JAVA > 국비수업' 카테고리의 다른 글
메소드 (Day16) (0) | 2020.07.21 |
---|---|
Day20 (0) | 2020.07.20 |
클래스(Day15) (0) | 2020.07.20 |
배열2(Day14) (0) | 2020.07.17 |
배열(Day13) (0) | 2020.07.17 |
Comments