public StringBuilder asStringBuilder() { StringBuilder buff = new StringBuilder(); DataUtils.appendMap(buff, "id", id); DataUtils.appendMap(buff, "rootPagePos", rootPagePos); DataUtils.appendMap(buff, "blockCount", blockCount); DataUtils.appendMap(buff, "pageCount", pageCount); DataUtils.appendMap(buff, "sumOfPageLength", sumOfPageLength); DataUtils.appendMap(buff, "pagePositionsOffset", pagePositionsOffset); DataUtils.appendMap(buff, "pageLengthsOffset", pageLengthsOffset); DataUtils.appendMap(buff, "blockSize", BTreeStorage.BLOCK_SIZE); DataUtils.appendMap(buff, "format", FORMAT_VERSION); return buff; }
@Override public String toString() { return DataUtils.appendMap(new StringBuilder(), config).toString(); }
/** * Append a map to the string builder, sorted by key. * * @param buff the target buffer * @param map the map * @return the string builder */ public static StringBuilder appendMap(StringBuilder buff, HashMap<String, ?> map) { ArrayList<String> list = new ArrayList<>(map.keySet()); Collections.sort(list); for (String k : list) { appendMap(buff, k, map.get(k)); } return buff; }
private synchronized void writeChunkHeader(BTreeChunk chunk) { StringBuilder buff = chunk.asStringBuilder(); byte[] bytes = buff.toString().getBytes(DataUtils.LATIN); int checksum = DataUtils.getFletcher32(bytes, bytes.length); DataUtils.appendMap(buff, "fletcher", checksum); buff.append("\n"); bytes = buff.toString().getBytes(DataUtils.LATIN); ByteBuffer header = ByteBuffer.allocate(CHUNK_HEADER_SIZE); header.put(bytes); header.position(BLOCK_SIZE); header.put(bytes); header.rewind(); write(chunk.fileStorage, 0, header); }