본문 바로가기
JAVA

[JAVA 개념12] IO기반 입출력 및 네트워킹

by 자유데이터 2018. 11. 13.
반응형

1.IO기반 입출력
: 프로그램에서는 데이터를 외부에서 읽고 다시 외부로 출력하는 작업을 스트림(Stream)을 통해 할 수 있다.
: 데이터를 출력하는 방식에 따라 사용하는 클래스가 달라진다.

1)바이트 단위 입출력
    : InputStream/ OutputStream
    : 전제를 다룬다.

2)문자 단위 입출력
    : Reader/ Writer
    ; 문자만 다룬다.

*stream
: 프로그램과 I/O 객체를 연결하여 데이터를 송수신 하는 길을 말한다.
: 단 방향으로 흐른다.

*Buffered : 잠시 입출력 하겠다.
*Object : 객체를 입출력 하겠다.
*Print : 프린터로 쓰겠다.





2.입력 출력 스트림

최상위 클래스는 객체를 생성하지 못하기 때문에 상속받아 사용해야 한다.

1)InputStream









-read()
: 1바이트씩 읽어 나가지만 돌려주는 값은 4바이트(int)이다.
: 그 4바이트 중 끝의 1바이트만 제대로 된 데이터가 들어있다.
    컴퓨터 cpu가 4바이트씩 끊어서 읽기 때문이다. (최적화된 컴퓨터 입장)




: 데이터를 표현할 때 부호비트가 사용되지 않아 음수로 표현할 수 없다.
: 따라서 더 이상 읽을 값이 없을 때 -1을 리턴한다. --> EOF(End Of File)


-read(byte[] b)
: 바가지로 퍼내는 식으로 한 번에 읽는다.
: 즉, 정해진 배열 크기로 한 번에 읽는다. 크기가 100이면 100바이트를 한 번에 읽는다.
: 읽은 수 만큼 리턴해준다.


-read(byte[] b, int off, int len)
: 바가지가 크더라도 원하는 크기만큼 읽고 저장할 수 있다. (바가지 사용용량을 조절한다.)
: 입력 스트림으로부터 len개의 바이트만큼 읽고, 매개값으로 주어진 바이트 배열 b[off]부터 len개까지 저장한다.
: 이때 off를 offset이라 하고 len을 length라 한다.
    이런 방식이 사용되는 이유는 보안상에서 offset을 조금씩 바꿔주기 때문이다.




2)OutputStream


-write(int b)
: 매개 변수로 주어진 int값에서 끝에 있는 1바이트만 출력 스트림으로 보낸다.


-flush()
: buffer 는 데이터가 꽉 채워질때 한 번에 배출한다.
: 따라서 잔류 데이터를 비우기 위해 사용된다.


3)Reader



문자 입력 방식이기 때문에 2바이트를 일고 4바이트(int)를 리턴한다.
나머지는  스트림 방식과 유사하다.



4)Writer




3.콘솔 입출력







4.파일 입출력




5.보조 스트림





1)문자 변화 보조 스트림



2)성능 향상 보조 스트림


Buffered는 아주 유용하게 쓰이기 때문에 잘 알아두자.


ex)



3)객체 입출력 보조 스트림

객체의 직렬화(Serialization)
객체가 가지고 있는 필드의 데이터 --> 바이트 열
객체의 역직렬화(De-serialization)
바이트 열--> 해당 필드의 데이터를 가지고 있는 객체

static이 붙은 필드와 transient 필드는 제외한다.
직렬화 대상은 그냥 핃드만 해당한다.
메소드와 생성자는 처음부터 직렬화 대상이 아니다.

**serialVersionUID 필드
: 같은 클래스임을 알려주는 식별자 역할을 한다.
: 클래스 이름이 같더라도 엔터 하나라도 치면 변경으로 인식하여 역직렬화 실패한다.
: 재컴파일하면 serialVersionUID의 값이 변경된다.



6.네트워크

-LAN : Local Area Network

-WAN : Wide Area Network
       예) 인터넷



-클라이언트(Client)
    : 서버에 서비스를 요청하는 프로그램
    : 서비스 요청을 HTTP Requst라 한다.

-서버(Server)
    : 클라이언트 서비스 요청을 처리하고 그 결과를
      클라이언트에 돌려주는(반환하는, 리턴하는) 프로그램
      요청을 돌려주는 것을 HTTP Response라 한다.

HTTP(HyperText Transfer Protocol)
    -XXXX protocol : 통신규약
    -HyperText : 위의 통신규약에 따라서, HTML문서를 소위 넘나들수 (=Hyper) 있는 문서를 의미함



ip주소 : 컴퓨터의 주소
포트 번호 : 프로그램의 주소
DNS : Domain Name Service



TCP: Transmission Control Protocol
: 전송을 제어하는 규약
: 속도는 느리더라도 데이터 주고받는 행위의 신뢰가 필요할때 사용한다.
: 즉, 데이터의 개수, 종류 등의 정확성이 필요할때.

-ServerSocket
: 연결요청을 수락하고 연결을 맺어주는 역할을 한다.
: 데이터를 주고 받을 수 없다.
: 바인딩포트를 가지고 있다.(바인딩 포트를 할 수 있다.)

-Socket
: 연결이 생성된 후에, 데이터를 주고 받는역할(주역할)
: 연결요청을 생성하고 서버쪽으로 보내는 역할
: 클라이언트와 서버 둘 다 가지고 있다.



UDP: User Datagram Protocol
: 개발자가 데이터를 만들고 보내는 규약
: 일단 네트워크로 보낸다.(편지 방식)
: 연결부분이 없기 때문에 속도가 빠르다.
: 신뢰도가 떨어져도 속도를 중요시할때 사용한다.
: 주소가 잘못될 경우 사라진다.




buildpath >>con>> javafx/**





















반응형

'JAVA' 카테고리의 다른 글

JAVA JDK 다운로드 및 설치 완벽 정리  (0) 2020.03.24
[JAVA 개념11] 스트림(Stream)  (0) 2018.11.13
[JAVA 개념10] 멀티 스레드(Multi Thread)  (1) 2018.11.13
[JAVA 개념 9] 람다식  (0) 2018.11.13
[JAVA 개념8] 제네릭  (0) 2018.11.13

댓글