@@ -144,26 +144,33 @@ public class MessageBuffer
144144 bufferClsName = isLittleEndian ? DEFAULT_MESSAGE_BUFFER : BIGENDIAN_MESSAGE_BUFFER ;
145145 }
146146
147- try {
148- // We need to use reflection here to find MessageBuffer implementation classes because
149- // importing these classes creates TypeProfile and adds some overhead to method calls.
147+ if (DEFAULT_MESSAGE_BUFFER .equals (bufferClsName )) {
148+ // No need to use reflection here, we're not using a MessageBuffer subclass.
149+ mbArrConstructor = null ;
150+ mbBBConstructor = null ;
151+ }
152+ else {
153+ try {
154+ // We need to use reflection here to find MessageBuffer implementation classes because
155+ // importing these classes creates TypeProfile and adds some overhead to method calls.
150156
151- // MessageBufferX (default, BE or U) class
152- Class <?> bufferCls = Class .forName (bufferClsName );
157+ // MessageBufferX (default, BE or U) class
158+ Class <?> bufferCls = Class .forName (bufferClsName );
153159
154- // MessageBufferX(byte[]) constructor
155- Constructor <?> mbArrCstr = bufferCls .getDeclaredConstructor (byte [].class , int .class , int .class );
156- mbArrCstr .setAccessible (true );
157- mbArrConstructor = mbArrCstr ;
160+ // MessageBufferX(byte[]) constructor
161+ Constructor <?> mbArrCstr = bufferCls .getDeclaredConstructor (byte [].class , int .class , int .class );
162+ mbArrCstr .setAccessible (true );
163+ mbArrConstructor = mbArrCstr ;
158164
159- // MessageBufferX(ByteBuffer) constructor
160- Constructor <?> mbBBCstr = bufferCls .getDeclaredConstructor (ByteBuffer .class );
161- mbBBCstr .setAccessible (true );
162- mbBBConstructor = mbBBCstr ;
163- }
164- catch (Exception e ) {
165- e .printStackTrace (System .err );
166- throw new RuntimeException (e ); // No more fallback exists if MessageBuffer constructors are inaccessible
165+ // MessageBufferX(ByteBuffer) constructor
166+ Constructor <?> mbBBCstr = bufferCls .getDeclaredConstructor (ByteBuffer .class );
167+ mbBBCstr .setAccessible (true );
168+ mbBBConstructor = mbBBCstr ;
169+ }
170+ catch (Exception e ) {
171+ e .printStackTrace (System .err );
172+ throw new RuntimeException (e ); // No more fallback exists if MessageBuffer constructors are inaccessible
173+ }
167174 }
168175 }
169176 }
@@ -266,7 +273,10 @@ public static MessageBuffer wrap(ByteBuffer bb)
266273 private static MessageBuffer newMessageBuffer (byte [] arr , int off , int len )
267274 {
268275 checkNotNull (arr );
269- return newInstance (mbArrConstructor , arr , off , len );
276+ if (mbArrConstructor != null ) {
277+ return newInstance (mbArrConstructor , arr , off , len );
278+ }
279+ return new MessageBuffer (arr , off , len );
270280 }
271281
272282 /**
@@ -278,7 +288,10 @@ private static MessageBuffer newMessageBuffer(byte[] arr, int off, int len)
278288 private static MessageBuffer newMessageBuffer (ByteBuffer bb )
279289 {
280290 checkNotNull (bb );
281- return newInstance (mbBBConstructor , bb );
291+ if (mbBBConstructor != null ) {
292+ return newInstance (mbBBConstructor , bb );
293+ }
294+ return new MessageBuffer (bb );
282295 }
283296
284297 /**
0 commit comments