code: @Override
      public char readChar() throws JMSException {
          if (TraceComponent.isAnyTracingEnabled() && tc.isEntryEnabled())
              SibTr.entry(this, tc, "readChar");
  
          try {
              // Check that we are in read mode
              checkBodyReadable("readChar");
              if (requiresInit)
                  lazyInitForReading();
  
              // Mark the current position, so we can return to it if there's an error
              readStream.mark(2);
  
              char result = readStream.readChar();
              // Byte swap the character if required
              if (integerEncoding == ApiJmsConstants.ENC_INTEGER_REVERSED) {
                  result = Character.reverseBytes(result);
              }
              if (TraceComponent.isAnyTracingEnabled() && tc.isEntryEnabled())
                  SibTr.exit(this, tc, "readChar", result);
              return result;
          } catch (IOException e) {
              try {
                  readStream.reset(); // return to the marked position
              } catch (IOException e2) {
              }
              JMSException jmse = (JMSException) JmsErrorUtils.newThrowable(
                                                              MessageEOFException.class,
                                                              "END_BYTESMESSAGE_CWSIA0183",
                                                              null,
                                                              tc);
              jmse.initCause(e);
              throw jmse;
          }
      }
docs: Read a Unicode character value from the stream message.
  
  @return the next two bytes from the stream message as a Unicode
  character.
  
  @exception MessageNotReadableException if message in write-only mode.
  @exception MessageEOFException if end of message stream
  @exception JMSException if JMS fails to read message due to
  some internal JMS error.