Reader, Write, InputStream, OutputStream, FileInputStream, FileOutputStream, 보조 스트림(필터 스트림), InputStreamReader(브릿지 스트림 or 문자 변환 보조 스트림), 프린터 보조 스트림, 객체 입출력 보조 스트림, 직..

2019. 3. 27. 19:28JAVA

------------------------------Reader----------------------------

BufferedReader 및 InputStreamReader를 쓸때는 FileReader를 사용해서 쓴다.

그리고 BufferedReader의 readLine()알면된다.


-----------------------------Write-------------------------------

PrintWrite의 println만 알면 된다.


-------------------------InputStream, OutputStream--------------------------

한바이트씩 읽어오고 기록하는것이다. 버퍼가 기본적으로 없기때문에
느리다 그래서 BufferedInputStream이 있다.

InputStream, OutputStream의 사용목적은 파일업로드, 복사, 수정 등 
파일관련된것을 이용하기위해 사용한다.
그렇지만 어차피 나중에 사용할때는 utils로 만들어 사용하는 경우가 대부분이다.



=========FileInputStream, FileOutputStream==========

FileInputStream
파일의 기록, 업로드 기능으로 int값 맨끝에만 값을 기록하고 다하면 -1을 기록한다.

FileOutputStream
파일의 저장, 읽어오는 기능이다.

예시1)




예시2) Url 활용




byte 배열로 인해 시간 단충 예)


시간이 몇백배 빨라진다.


외부 copy 예제)


외부에서 만든 jar을 쓰면 무척 간편하다.


외부 copy 예제2)






------------------------------보조 스트림(필터 스트림)--------------------------

보조스트림이란
다른 스트림과 연결되어 여러가지 편리한 기능을 제공해주는 스트림을 말한다.
보조스트림은 주 스트림과 연결해서 사용해야한다.

예시) 보조 스트림 생성시--------------------------
new BuffereInputStream(InputStream in)
new BufferedReader(Reader in)
new ObjectInputStream(InputStream in)
new DataInputStream(inputStream in)
-----------------------------------------------
다른 스트림이 제공되어야만 생성이 가능하다.


주 스트림 생성시----------------------------
new FileInputStream(String filename)
new FileReader(String filename)
-----------------------------------------------
만들때 다른 스트림 도움없이 만들 수 있다.


##사용목적##
주 스트림의 성능을 향상해 사용하기위해 사용



============InputStreamReader(브릿지 스트림 or 문자 변환 보조 스트림)==========

InputStreamReader란
InputStreamReader는 바이트스트림에 연결되어 문자스트림인
Reader로 변환시키는 보조 스트림이다.


InputStream과 BufferdReader를 연결할 수 있게 해주는 보조 스트림



또는





===========프린터 보조 스트림===========

PrintWrite, PrintStream 이 있다.




--------------------------객체 입출력 보조 스트림---------------------------

##직렬화가 가능한 클래스(Serialization - 마크업 인터페이스)##
객체를 직렬화하면 클래스를 보내는게아니라 필드값과 클래스 정보를 스트림을 통해 바이트로 보내는것


직렬화(마샬링)
ObjectOutputStream
객체의 정보(필드 값, 클래스 정보 등)를 스트림을 통해 바이트 데이터로 보내는것

역직렬화(언 마샬링)
ObjectInputStream
직렬화 바이트데이터값을 받아와서 복원화하는것


사용 목적
직접 쓸일은 없다만 사용하는 이유는 보통 여러 서버로 서비스를 돌리는데 서버간의 공유를 위해 사용된다.

나중에 객체를 만들때 implements Serializable을 해야 직렬화를 사용할 수 있다.


직렬화 예제

객체1)




객체2)


직렬화)-----------------------------------------------------------





역 직렬화)-------------------------------------------------------





만약 직렬화 하기싫은 정보가 있다면 값앞에 transient, static을 쓸 경우 제외된다.


----------------------------------------------------------- 결과---------------------------------------



위와같이 비번이 int의 초기값인 0으로 나온다.






============serivalVersinUID============

UID는 Serializable 인터페이스를 구현하면 자동으로 추가되는 정적 필드다.
UID는 클래스를 재컴파일할 때마다 (소스가 변경된 경우)UID값을 바뀐다.

역직렬화과정에서는 직렬화된 객체의 클래스를 복원하는 곳에서 같은 클래스(설계도)를
반드시 가지고 있어야 하는데, UID값을 비교하면 같은 클래스인지를 확인할 수 있다.