static private ParseFrom ( |
||
reader | ||
size | int | |
리턴 |
internal static BufferedMessageSet ParseFrom(KafkaBinaryReader reader, int size, long initialOffset) { if (size == 0) { return(new BufferedMessageSet(Enumerable.Empty <Message>(), initialOffset)); } short errorCode = reader.ReadInt16(); if (errorCode != ErrorMapping.NoError) { if (errorCode == ErrorMapping.OffsetOutOfRangeCode) { return(new BufferedMessageSet(Enumerable.Empty <Message>(), errorCode, initialOffset)); } throw new KafkaException(errorCode); } int readed = 2; if (readed == size) { return(new BufferedMessageSet(Enumerable.Empty <Message>(), initialOffset)); } var messages = new List <Message>(); do { int msgSize = reader.ReadInt32(); readed += 4; int sizeNotUsed = size - readed; if (msgSize > sizeNotUsed || msgSize < 0) { if (messages.Count == 0 || msgSize < 0) { string errorMessage = String.Format( "Invalid message size. Read size = {0}, the remaining data size = {1} (possible causes (1) a single message larger than the fetch size; (2) log corruption)", msgSize, sizeNotUsed); throw new InvalidMessageSizeException(errorMessage); } return(new BufferedMessageSet(messages, initialOffset)); } Message msg = Message.ParseFrom(reader, msgSize); readed += msgSize; messages.Add(msg); }while (readed < size); if (size != readed) { throw new KafkaException(ErrorMapping.InvalidFetchSizeCode); } return(new BufferedMessageSet(messages, initialOffset)); }
internal static BufferedMessageSet ParseFrom(byte[] bytes) { var messages = new List <Message>(); int processed = 0; int length = bytes.Length - 4; while (processed <= length) { int messageSize = BitConverter.ToInt32(BitWorks.ReverseBytes(bytes.Skip(processed).Take(4).ToArray()), 0); messages.Add(Message.ParseFrom(bytes.Skip(processed).Take(messageSize + 4).ToArray())); processed += 4 + messageSize; } return(new BufferedMessageSet(messages)); }
public static BufferedMessageSet ParseFrom(KafkaBinaryReader reader, int size, int partitionID) { int bytesLeft = size; if (bytesLeft == 0) { return(new BufferedMessageSet(Enumerable.Empty <Message>(), partitionID)); } var messages = new List <Message>(); do { // Already read last message if (bytesLeft < 12) { break; } long offset = reader.ReadInt64(); int msgSize = reader.ReadInt32(); bytesLeft -= 12; if (msgSize > bytesLeft || msgSize < 0) { break; } Message msg = Message.ParseFrom(reader, offset, msgSize, partitionID); bytesLeft -= msgSize; messages.Add(msg); }while (bytesLeft > 0); if (bytesLeft > 0) { reader.ReadBytes(bytesLeft); } return(new BufferedMessageSet(messages, partitionID)); }
internal static BufferedMessageSet ParseFrom(KafkaBinaryReader reader, int size) { if (size == 0) { return(new BufferedMessageSet(Enumerable.Empty <Message>())); } short errorCode = reader.ReadInt16(); if (errorCode != KafkaException.NoError) { throw new KafkaException(errorCode); } int readed = 2; if (readed == size) { return(new BufferedMessageSet(Enumerable.Empty <Message>())); } var messages = new List <Message>(); do { int msgSize = reader.ReadInt32(); readed += 4; Message msg = Message.ParseFrom(reader, msgSize); readed += msgSize; messages.Add(msg); }while (readed < size); if (size != readed) { throw new KafkaException(KafkaException.InvalidRetchSizeCode); } return(new BufferedMessageSet(messages)); }