본문 바로가기
프로그래밍/Netty Encoder & Decoder

Netty Encoder & Decoder

by Flow.X 2022. 1. 10.
728x90

네트워크로 데이터는 row byte로 흘러 다니는데 그걸 수신하고 자기가 원하는 포멧으로 바꾸거나 (Decoder)

다시 네트워크로 보낼때 row byte로 바꿔주는 역활을 하는 것이라고 보면 된다.

 

EchoServer를 다시 보면 

 

들어오는것은 

byte ▶ loggingHandler로 로그찍고(byte) ▶ StringDecoder (String) ▶ EchoServerHandler ( String) 으로

도착하게 된다. 

 

그리고 나갈때는 

EchoServerHandler ( String)  ▶ StringEncoder ( byte ) ▶ LoggingHandler (byte) 로 흘러간다. 

channel.pipeline().addLast(new LoggingHandler(LogLevel.INFO)); // byte 수신 

channel.pipeline().addLast(new StringDecoder(CharsetUtil.UTF_8)); // byte -> String

channel.pipeline().addLast(new EchoServerHanlder()); // string -> write String

channel.pipeline().addLast(new StringEncoder()); // String -> byte

 

StringDecoder 부터 보자 

MessageToMessageDecoder를 통해 상속받고 데이터 타입은 <ByteBuf> 다.

생성자에서 charset 받고,

decode 함수에서 걍 toString으로 바꿔주네

그리고 out에다가 add 해주는 코드다.

Netty StringDecoder 내부

 

StringEncoder를 보기전에 추측해보자 

MessageToMessageEncoder를 상속받고 데이터 타입은 <String>이겠지

생성자에 charset받고 

encode함수에  string-> bytebuf로 변환할것 같다 

그리고 out.add 를 하겠지..

Netty StringEncoder 내부

음 하나가 틀렸군.. CharSequence 구먼..

String 은 클래스고, CharSequence 는 인터페이스란다.

아래에 보면 String은  CharSequence를 통해 구현했네 .

String.class 내용

 

Encoder/Decoder 를 간단히 보자 

1) 생성자에 기본 파라미터를 전달하고

2) encode/decode 함수를 재정의해서 out.add 해주면 된다.

3) 그럼 자동으로 다음으로 전달이 된다 

 

728x90

'프로그래밍 > Netty Encoder & Decoder' 카테고리의 다른 글

Netty Encoder with VSCode (1)  (0) 2022.01.10
Netty Decoder with VSCode (2)  (0) 2022.01.07
Netty Encoder with VSCode  (0) 2022.01.06
Netty Decoder with VS Code (1)  (0) 2022.01.06