1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 package io.netty.handler.codec.string;
17
18 import io.netty.buffer.ByteBuf;
19 import io.netty.buffer.ByteBufUtil;
20 import io.netty.channel.ChannelHandler.Sharable;
21 import io.netty.channel.ChannelHandlerContext;
22 import io.netty.channel.ChannelPipeline;
23 import io.netty.handler.codec.LineBasedFrameDecoder;
24 import io.netty.handler.codec.MessageToMessageEncoder;
25 import io.netty.util.CharsetUtil;
26 import io.netty.util.internal.ObjectUtil;
27
28 import java.nio.CharBuffer;
29 import java.nio.charset.Charset;
30 import java.util.List;
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53 @Sharable
54 public class LineEncoder extends MessageToMessageEncoder<CharSequence> {
55
56 private final Charset charset;
57 private final byte[] lineSeparator;
58
59
60
61
62 public LineEncoder() {
63 this(LineSeparator.DEFAULT, CharsetUtil.UTF_8);
64 }
65
66
67
68
69 public LineEncoder(LineSeparator lineSeparator) {
70 this(lineSeparator, CharsetUtil.UTF_8);
71 }
72
73
74
75
76 public LineEncoder(Charset charset) {
77 this(LineSeparator.DEFAULT, charset);
78 }
79
80
81
82
83 public LineEncoder(LineSeparator lineSeparator, Charset charset) {
84 super(CharSequence.class);
85 this.charset = ObjectUtil.checkNotNull(charset, "charset");
86 this.lineSeparator = ObjectUtil.checkNotNull(lineSeparator, "lineSeparator").value().getBytes(charset);
87 }
88
89 @Override
90 protected void encode(ChannelHandlerContext ctx, CharSequence msg, List<Object> out) throws Exception {
91 ByteBuf buffer = ByteBufUtil.encodeString(ctx.alloc(), CharBuffer.wrap(msg), charset, lineSeparator.length);
92 buffer.writeBytes(lineSeparator);
93 out.add(buffer);
94 }
95 }