package com.taobao.metamorphosis.client.consumer; import java.nio.ByteBuffer; import java.util.Arrays; import java.util.NoSuchElementException; import com.taobao.metamorphosis.Message; import com.taobao.metamorphosis.exception.InvalidMessageException; import com.taobao.metamorphosis.utils.MessageUtils; /** * ��Ϣ������������������������� * * @author boyan * @deprecated Please use com.taobao.metamorphosis.consumer.MessageIterator * instead. * @see com.taobao.metamorphosis.consumer.MessageIterator * @Date 2011-4-20 * */ @Deprecated public class MessageIterator { private final String topic; private final byte[] data; private int offset; private Message message; private ByteBuffer currentMsgBuf; public MessageIterator(final String topic, final byte[] data) { super(); this.topic = topic; this.data = data; this.offset = 0; } public ByteBuffer getCurrentMsgBuf() { return this.currentMsgBuf; } public int getDataLength() { return this.data != null ? this.data.length : 0; } public void setOffset(final int offset) { this.offset = offset; } public Message getPrevMessage() { return this.message; } /** * ���ص�ǰ������ƫ���������������������ƫ�������� * * @return */ public int getOffset() { return this.offset; } /** * ��������Ϣ��ʱ�򷵻�true * * @return */ public boolean hasNext() { if (this.data == null || this.data.length == 0) { return false; } if (this.offset >= this.data.length) { return false; } if (this.data.length - this.offset < MessageUtils.HEADER_LEN) { return false; } final int msgLen = MessageUtils.getInt(this.offset, this.data); if (this.data.length - this.offset - MessageUtils.HEADER_LEN < msgLen) { return false; } return true; } /** * ������һ����Ϣ * * @return * @throws InvalidMessageException */ public Message next() throws InvalidMessageException { if (!this.hasNext()) { throw new NoSuchElementException(); } final MessageUtils.DecodedMessage decodeMessage = MessageUtils.decodeMessage(this.topic, this.data, this.offset); this.setOffset(decodeMessage.newOffset); this.message = decodeMessage.message; this.currentMsgBuf = decodeMessage.buf; return decodeMessage.message; } @Override public int hashCode() { final int prime = 31; int result = 1; result = prime * result + Arrays.hashCode(this.data); result = prime * result + this.offset; result = prime * result + (this.topic == null ? 0 : this.topic.hashCode()); return result; } @Override public boolean equals(final Object obj) { if (this == obj) { return true; } if (obj == null) { return false; } if (this.getClass() != obj.getClass()) { return false; } final MessageIterator other = (MessageIterator) obj; if (!Arrays.equals(this.data, other.data)) { return false; } if (this.offset != other.offset) { return false; } if (this.topic == null) { if (other.topic != null) { return false; } } else if (!this.topic.equals(other.topic)) { return false; } return true; } public void remove() { throw new UnsupportedOperationException("Unsupported remove"); } }