관리 메뉴

Frog is cry

Day19 본문

JAVA/국비수업

Day19

Frog is cry 2020. 7. 20. 18:42
"복습"
바이트기반 스트림
바이트기반 보조스트림

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