public String getContent()

in tablestore/src/main/java/com/alicloud/openservices/tablestore/timeline/model/TimelineMessageForV1.java [114:190]


    public String getContent() {
        if (stringMessage != null) {
            return stringMessage;
        }

        /**
         * Get Message Content Count
         */
        String contentCountName = SYSTEM_COLUMN_NAME_PREFIX + messageContentCountSuffix;
        long currentCount = 0;
        long columnCount = message.getLong(contentCountName);
        ByteArrayOutputStream stream = new ByteArrayOutputStream();

        /**
         * Get CRC32 And Message Content..
         */
        int index = CONTENT_COLUMN_START_ID;
        long crc32 = 0;

        Map<String, Column> columns = message.getFields();
        List<Map.Entry<String,Column>> list = new ArrayList<Map.Entry<String,Column>>(columns.entrySet());
        Collections.sort(list, new Comparator<Map.Entry<String,Column>>(){
            @Override
            public int compare(Map.Entry<String, Column> o1, Map.Entry<String, Column> o2) {
                return o1.getKey().compareTo(o2.getKey());
            }
        });

        for (Map.Entry<String,Column> entry: list) {
            String key = entry.getKey();
            Column column = columns.get(key);
            String name = column.getName();

            if (name.startsWith(SYSTEM_COLUMN_NAME_PREFIX + messageContentSuffix)) {
                if (currentCount == columnCount) {
                    continue;
                }
                int columnSeqID = Integer.parseInt(name.substring(SYSTEM_COLUMN_NAME_PREFIX.length() + messageContentSuffix.length()));
                if (columnSeqID != index) {
                    throw new TimelineException(String.format("Message Content column sequence id is wrong, expected:%d, but:%d", index, columnSeqID));
                }

                byte[] value = column.getValue().asBinary();
                stream.write(value, 0, value.length);

                index++;
                currentCount++;
            } else if (name.equals(SYSTEM_COLUMN_NAME_PREFIX + columnNameOfMessageCrc32Suffix)) {
                crc32 = column.getValue().asLong();
            }
        }

        if (columnCount != -1 && currentCount != columnCount) {
            throw new TimelineException(String.format("Message content column is broken, expected %d, but %d", columnCount, currentCount));
        }
        byte[] content = stream.toByteArray();

        try {
            stream.close();
        } catch (IOException ex) {
            throw new TimelineException("Close ByteArrayOutputStream failed", ex);
        }

        /**
         * Check CRC32
         * */
        if (columnNameOfMessageCrc32Suffix != null && !columnNameOfMessageCrc32Suffix.isEmpty()) {
            long current = crc32(content);
            if (current != crc32) {
                throw new TimelineException(String.format("Message content is broken, expected crc32:%d, but:%d", crc32, current));
            }
        }

        stringMessage = new String(content);

        return stringMessage;
    }