streammessageimpl.java
来自「OpenJMS是一个开源的Java Message Service API 1.」· Java 代码 · 共 1,192 行 · 第 1/3 页
JAVA
1,192 行
/* * Read a 32-bit integer from the stream message * * @return a 32-bit integer value from the stream message, interpreted * as an <code>int</code> * @throws JMSException if JMS fails to read message due to some internal * JMS error * @throws MessageEOFException if end of message stream * @throws MessageFormatException if this type conversion is invalid * @throws MessageNotReadableException if message is in write-only mode * @throws NumberFormatException if numeric conversion is invalid */ public final int readInt() throws JMSException { int result = 0; prepare(); try { result = FormatConverter.getInt(readNext()); } catch (MessageFormatException exception) { revert(exception); } catch (NumberFormatException exception) { revert(exception); } return result; } /* * Read a 64-bit integer from the stream message * * @return a 64-bit integer value from the stream message, interpreted as * a <code>long</code> * @throws JMSException if JMS fails to read message due to some internal * JMS error * @throws MessageEOFException if end of message stream * @throws MessageFormatException if this type conversion is invalid * @throws MessageNotReadableException if message is in write-only mode * @throws NumberFormatException if numeric conversion is invalid */ public final long readLong() throws JMSException { long result = 0; prepare(); try { result = FormatConverter.getLong(readNext()); } catch (MessageFormatException exception) { revert(exception); } catch (NumberFormatException exception) { revert(exception); } return result; } /** * Read a <code>float</code> from the stream message * * @return a <code>float</code> value from the stream message * @throws JMSException if JMS fails to read message due to some internal * JMS error * @throws MessageEOFException if end of message stream * @throws MessageFormatException if this type conversion is invalid * @throws MessageNotReadableException if message is in write-only mode * @throws NullPointerException if the value is null * @throws NumberFormatException if numeric conversion is invalid */ public final float readFloat() throws JMSException { float result = 0; prepare(); try { result = FormatConverter.getFloat(readNext()); } catch (MessageFormatException exception) { revert(exception); } catch (NullPointerException exception) { revert(exception); } catch (NumberFormatException exception) { revert(exception); } return result; } /** * Read a <code>double</code> from the stream message * * @return a <code>double</code> value from the stream message * @throws JMSException if JMS fails to read message due to some internal * JMS error * @throws MessageEOFException if end of message stream * @throws MessageFormatException if this type conversion is invalid * @throws MessageNotReadableException if message is in write-only mode * @throws NullPointerException if the value is null * @throws NumberFormatException if numeric conversion is invalid */ public final double readDouble() throws JMSException { double result = 0; prepare(); try { result = FormatConverter.getDouble(readNext()); } catch (MessageFormatException exception) { revert(exception); } catch (NullPointerException exception) { revert(exception); } catch (NumberFormatException exception) { revert(exception); } return result; } /** * Read in a string from the stream message * * @return a Unicode string from the stream message * @throws JMSException if JMS fails to read message due to some internal * JMS error * @throws MessageEOFException if end of message stream * @throws MessageFormatException if this type conversion is invalid * @throws MessageNotReadableException if message is in write-only mode */ public final String readString() throws JMSException { String result = null; prepare(); try { result = FormatConverter.getString(readNext()); } catch (MessageFormatException exception) { revert(exception); } return result; } /** * Read a byte array field from the stream message into the * specified byte[] object (the read buffer). * <p> * To read the field value, readBytes should be successively called * until it returns a value less than the length of the read buffer. * The value of the bytes in the buffer following the last byte * read are undefined. * <p> * If readBytes returns a value equal to the length of the buffer, a * subsequent readBytes call must be made. If there are no more bytes * to be read this call will return -1. * <p> * If the bytes array field value is null, readBytes returns -1. * <p> * If the bytes array field value is empty, readBytes returns 0. * <p> * Once the first readBytes call on a byte[] field value has been done, * the full value of the field must be read before it is valid to read * the next field. An attempt to read the next field before that has * been done will throw a MessageFormatException. * <p> * To read the byte field value into a new byte[] object, use the * {@link #readObject} method. * * @param value the buffer into which the data is read. * @return the total number of bytes read into the buffer, or -1 if * there is no more data because the end of the byte field has been * reached. * @throws JMSException if JMS fails to read message due to some internal * JMS error * @throws MessageEOFException if an end of message stream * @throws MessageFormatException if this type conversion is invalid * @throws MessageNotReadableException if message is in write-only mode */ public final int readBytes(byte[] value) throws JMSException { checkRead(); getInputStream(); int read = 0; // the number of bytes read if (_readBytes == 0) { // read the next byte array field try { _in.mark(_bytes.length - _in.available()); byte type = (byte) (_in.readByte() & 0x0F); if (type == NULL) { return -1; } else if (type != BYTE_ARRAY) { _in.reset(); if (type < TYPE_NAMES.length) { throw new MessageFormatException( "Expected type=" + TYPE_NAMES[BYTE_ARRAY] + ", but got type=" + TYPE_NAMES[type]); } else { throw new MessageFormatException( "StreamMessage corrupted"); } } } catch (IOException exception) { raise(exception); } try { _byteArrayLength = _in.readInt(); } catch (IOException exception) { raise(exception); } } if (_byteArrayLength == 0) { // No bytes to read. Return -1 if this is an incremental read // or 0 if the byte array was empty if (_readBytes != 0) { // completing an incremental read read = -1; } _readBytes = 0; // indicates finished reading the byte array } else if (value.length <= _byteArrayLength) { // bytes to read >= size of target read = value.length; try { _in.readFully(value); } catch (IOException exception) { raise(exception); } _byteArrayLength -= value.length; ++_readBytes; } else { // bytes to read < size of target read = _byteArrayLength; try { _in.readFully(value, 0, _byteArrayLength); } catch (IOException exception) { raise(exception); } _readBytes = 0; } return read; } /** * Read a Java object from the stream message * <p> * Note that this method can be used to return in objectified format, * an object that had been written to the stream with the equivalent * <code>writeObject</code> method call, or it's equivalent primitive * write<type> method. * <p> * Note that byte values are returned as byte[], not Byte[]. * * @return a Java object from the stream message, in objectified * format (eg. if it set as an int, then a Integer is returned). * @throws JMSException if JMS fails to read message due to some internal * JMS error * @throws MessageEOFException if end of message stream * @throws MessageNotReadableException if message is in write-only mode */ public final Object readObject() throws JMSException { Object result = null; prepare(); try { result = readNext(); } catch (MessageFormatException exception) { revert(exception); } return result; } /** * Write a <code>boolean</code> to the stream message. * The value <code>true</code> is written out as the value * <code>(byte)1</code>; the value <code>false</code> is written out as * the value <code>(byte)0</code>. * * @param value the <code>boolean</code> value to be written. * @throws JMSException if JMS fails to write message due to * some internal JMS error * @throws MessageNotWriteableException if message in read-only mode */ public final void writeBoolean(boolean value) throws JMSException { checkWrite(); try { getOutputStream(); // encode the boolean value in the type byte _out.writeByte(BOOLEAN | ((value) ? 1 << 4 : 0)); } catch (IOException exception) { raise(exception); } } /** * Write out a <code>byte</code> to the stream message * * @param value the <code>byte</code> value to be written * @throws JMSException if JMS fails to write message due to * some internal JMS error * @throws MessageNotWriteableException if message in read-only mode */ public final void writeByte(byte value) throws JMSException { checkWrite(); try { getOutputStream(); _out.writeByte(BYTE); _out.writeByte(value); } catch (IOException exception) { raise(exception); } } /** * Write a <code>short</code> to the stream message * * @param value the <code>short</code> to be written * @throws JMSException if JMS fails to write message due to * some internal JMS error * @throws MessageNotWriteableException if message in read-only mode */ public final void writeShort(short value) throws JMSException { checkWrite(); try { getOutputStream(); _out.writeByte(SHORT); _out.writeShort(value); } catch (IOException exception) { raise(exception); } } /** * Write a <code>char</code> to the stream message * * @param value the <code>char</code> value to be written * @throws JMSException if JMS fails to write message due to * some internal JMS error * @throws MessageNotWriteableException if message in read-only mode */ public final void writeChar(char value) throws JMSException { checkWrite(); try { getOutputStream(); _out.writeByte(CHAR); _out.writeChar(value); } catch (IOException exception) { raise(exception); } } /** * Write an <code>int</code> to the stream message * * @param value the <code>int</code> to be written * @throws JMSException if JMS fails to write message due to * some internal JMS error * @throws MessageNotWriteableException if message in read-only mode */ public final void writeInt(int value) throws JMSException { checkWrite(); try { getOutputStream(); _out.writeByte(INT); _out.writeInt(value); } catch (IOException exception) { raise(exception); } } /** * Write a <code>long</code> to the stream message * * @param value the <code>long</code> to be written * @throws JMSException if JMS fails to write message due to * some internal JMS error * @throws MessageNotWriteableException if message in read-only mode */ public final void writeLong(long value) throws JMSException { checkWrite(); try { getOutputStream(); _out.writeByte(LONG); _out.writeLong(value); } catch (IOException exception) { raise(exception); } } /** * Write a <code>float</code> to the stream message * * @param value the <code>float</code> value to be written * @throws JMSException if JMS fails to write message due to * some internal JMS error * @throws MessageNotWriteableException if message in read-only mode */ public final void writeFloat(float value) throws JMSException { checkWrite(); try { getOutputStream(); _out.writeByte(FLOAT); _out.writeFloat(value); } catch (IOException exception) { raise(exception); } } /** * Write a <code>double</code> to the stream message * * @param value the <code>double</code> value to be written * @throws JMSException if JMS fails to write message due to * some internal JMS error * @throws MessageNotWriteableException if message in read-only mode */ public final void writeDouble(double value) throws JMSException { checkWrite(); try {
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?