1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 package org.jboss.netty.buffer;
17
18 import java.nio.ByteBuffer;
19 import java.nio.ByteOrder;
20
21
22
23
24
25
26
27
28
29
30
31 public class HeapChannelBufferFactory extends AbstractChannelBufferFactory {
32
33 private static final HeapChannelBufferFactory INSTANCE_BE =
34 new HeapChannelBufferFactory(ByteOrder.BIG_ENDIAN);
35
36 private static final HeapChannelBufferFactory INSTANCE_LE =
37 new HeapChannelBufferFactory(ByteOrder.LITTLE_ENDIAN);
38
39 public static ChannelBufferFactory getInstance() {
40 return INSTANCE_BE;
41 }
42
43 public static ChannelBufferFactory getInstance(ByteOrder endianness) {
44 if (endianness == ByteOrder.BIG_ENDIAN) {
45 return INSTANCE_BE;
46 } else if (endianness == ByteOrder.LITTLE_ENDIAN) {
47 return INSTANCE_LE;
48 } else if (endianness == null) {
49 throw new NullPointerException("endianness");
50 } else {
51 throw new IllegalStateException("Should not reach here");
52 }
53 }
54
55
56
57
58
59 public HeapChannelBufferFactory() {
60 super();
61 }
62
63
64
65
66
67
68 public HeapChannelBufferFactory(ByteOrder defaultOrder) {
69 super(defaultOrder);
70 }
71
72 public ChannelBuffer getBuffer(ByteOrder order, int capacity) {
73 return ChannelBuffers.buffer(order, capacity);
74 }
75
76 public ChannelBuffer getBuffer(ByteOrder order, byte[] array, int offset, int length) {
77 return ChannelBuffers.wrappedBuffer(order, array, offset, length);
78 }
79
80 public ChannelBuffer getBuffer(ByteBuffer nioBuffer) {
81 if (nioBuffer.hasArray()) {
82 return ChannelBuffers.wrappedBuffer(nioBuffer);
83 }
84
85 ChannelBuffer buf = getBuffer(nioBuffer.order(), nioBuffer.remaining());
86 int pos = nioBuffer.position();
87 buf.writeBytes(nioBuffer);
88 nioBuffer.position(pos);
89 return buf;
90 }
91 }