3-2공부/네트워크프로그래밍 9

[Java] 네트워크

네트워크에는 노드와 호스트가 있다. 노드(Node)는 네트워크 상에 존재하는 장치로 컴퓨터, 라우터, 스위치 등을 의미한다. 호스트(Host)는 이 노드 중 컴퓨터를 의미한다. IP Address는 이런 노드와 호스트를 가리키는 주소다. 전통적인 IP Address는 IPv4 형태로, 4바이트로 구성된 주소다. 우리에게 익숙한 255.255.255.255 형태의 IP가 IPv4다. 하지만 계속 노드와 호스트의 수가 늘어나면서 IPv4의 256^4개 로는 부족해졌다. 여기서 새롭게 도입된것이 IPv6 형태로, 16바이트로 구성된 주소다. IPv6는 2바이트씩 ':(콜론)'으로 나눠서 표기한다. 0000:0000:0000:0000:0000:0000:0000:0000 과 같은 형태가 IPv6이다. 일반적으로 ..

[Java] 암호화

Java에서 암호화를 구현하는 스트림은 두 종류가 있다. java.security.DigestStream javax.crypto.CypherStream 이름만 봤을 때 CypherStream쪽이 좀 더 전문성이 있어보이지만, 아쉽게도 수업 시간에는 DigestStream에 대한 부분만 배웠다. Digest는 HashCode와 같은 말로, 데이터가 전송도중 변조되었는지의 여부를 알아내기 위해 사용한다. 이러한 코드를 만드는 Hash Function은 다음과 같은 조건을 만족해야 하는데, Strong : 동일한 해시 값이 나오는 일이 거의 불가능해야 한다. One-way : 원문을 리버스 엔지니어링하는것이 매우 어려워야한다. Deterministic : 동일한 입력에 늘 같은 출력을 보여야한다. Unifor..

[Java] 압축

자바의 압축은 Deflater와 Inflater를 이용한다. Deflater에서 압축하기 위해서는 압축 수준과 압축 정책을 설정해야 한다. - 압축 수준 ( Compression Level ) : 0 ~ 9 0 = NO_COMPRESSION, 1 = BEST_SPEED, 9 = BEST_COMPRESSION - 압축 정책 ( Compression Strategy ) : 0 ~ 2 0 = DEFAULT, 1 = FILTERED, 2 = HUFFMAN setInput()을 이용해 압축할 파일을 입력하고, 모두 입력하면 finish()를 호출한다. 그리고 finished()가 false이면 deflater()를 계속 호출해야한다. Inflater에서 압축해제하려면 inflate() == 0이 될때 까지 압축해..

[Java] Serialize, 직렬화

Java의 Serialization, 직렬화 기능은 한 객체에 영속성을 부여하여 서로 다른 시스템에서 객체의 사본을 공유받을 수 있게 하는 기능이다. 클래스는 Serializable Interface를 구현해야 직렬화가 가능하다. 이 때, 사본은 ByteArray형태로 객체의 클래스, 값 등이 저장되며 이는 ObjectInputStream / ObjectOutputStream 에 의해 관리된다. 직렬화 과정은 static(전역), transient(직렬화 금지) 등의 처리가 된 변수들은 저장하지 않으며, 역직렬화 과정에서도 직렬화 데이터 대로 변수를 재생성하는 것이 아니라, 이미지 그대로 구현하는 것이므로 생성자가 실행되지 않는다. 또한, 직렬화/역직렬화 과정을 직접 수행하려면 Serializable I..

[Java] Writer

java.io.Writer implements Closeable, Flushable, Appendable, AutoCloseable(자동 닫기 가능) 앞의 Reader와 같이 문자열 처리를 더 편리하게 해주기 위한 OutputStream 확장이란 느낌이다. OutputStream에서는 Buffer가 있는 클래스만 flush()를 해주면 되지만, Writer에서는 반드시 flush()를 해야한다고 한다. - 추상 함수 ( Abstract Method ) close() : 스트림을 닫는다. flush() : 버퍼에 보관된 스트림을 출력한다. write(charBuffer, offset, length) : charBuffer의 내용을 출력한다. - 지역 함수 ( Local Method ) write(charB..

[Java] Reader

java.io.Reader implements Readable(문자 읽기), Closeable(스트림을 닫을 수 있음) 앞서 설명한 InputStream은 byte를 읽기 위한 것이라면, Reader는 char/string을 읽기 위한 것이다. ( 좀 더 High-level ) - 추상 함수 ( Abstract Method ) close() : 스트림을 닫는다. read(charBuffer, offset, length) : 스트림을 읽는다. - 지역 함수 ( Local Method ) read() : 다음 한 문자를 읽는다. reset() : 스트림의 상태를 초기로 돌려놓는다. ( 파일 처음부터 읽기 가능 ) skip(n) : n-char 만큼 스킵한다. java.io.InputStreamReader e..

[Java] OutputStream

java.io.OutputStream implements Closeable (스트림을 닫을 수 있다), Flushable (버퍼를 출력할 수 있다.) InputStream은 스트림을 출력하기기 위한 스트림들의 슈퍼클래스이다. - 추상 함수 ( Abstract Method ) write() : 스트림에 1바이트를 입력한다. - 지역 함수 ( Local Method ) close() : 스트림 종료 flush() : 버퍼에 저장되있던 바이트들을 한 번에 출력한다. write(byteArray, offset, length) : byteArray에 데이터를 쓴다. java.io.FileOutputStream extends OutputStream 파일을 Stream을 통해 읽기 위한 클래스이다. - 생성자 ( C..

[Java] InputStream

java.io.InputStream implements Closeable (스트림을 닫을 수 있다) InputStream은 스트림을 불러들이기 위한 스트림들의 슈퍼클래스이다. - 추상 함수 ( Abstract Method ) read() : 스트림에서의 다음 바이트를 읽는다. - 지역 함수 ( Local Method ) available() : 읽을 수 있는 남은 바이트 수 close() : 스트림 종료 mark() : 스트림 내에서 읽을 수 있는 한계 바이트 위치를 정한다. read(byteArray, offset, length) : byteArray에 데이터를 read한다. reset() : stream를 읽고 있는 위치를 mark()가 선언된 곳으로 돌아간다. skip(n) : n byte를 넘긴다..

[Java] File

java.io.File extends Object implements Serializable(직렬화 가능), Comparable (경로명을 알파벳순으로 비교) - 파일의 종류 Text File : 사람이 읽을 수 있는 문자로 작성된 파일 Binary File : bit들의 연속으로 작성된 파일 - 전역변수 ( Static Field ) pathSeparator / pathSeparatorChar : 윈도우에서는 ';' separator / separatorChar : 윈도우에서는 '\' - 전역함수 ( Static Method ) createTempFile(prefix, suffix[, directory]) : 임시파일 생성 prefix : 파일의 이름 suffix : 파일의 확장자 directory :..