네트워크로 데이터는 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 해주는 코드다.
StringEncoder를 보기전에 추측해보자
MessageToMessageEncoder를 상속받고 데이터 타입은 <String>이겠지
생성자에 charset받고
encode함수에 string-> bytebuf로 변환할것 같다
그리고 out.add 를 하겠지..
음 하나가 틀렸군.. CharSequence 구먼..
String 은 클래스고, CharSequence 는 인터페이스란다.
아래에 보면 String은 CharSequence를 통해 구현했네 .
Encoder/Decoder 를 간단히 보자
1) 생성자에 기본 파라미터를 전달하고
2) encode/decode 함수를 재정의해서 out.add 해주면 된다.
3) 그럼 자동으로 다음으로 전달이 된다
'프로그래밍 > 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 |