Я пишу программу, используя hadoop. мой вопрос код, как сильфонные (код в картографе):Почему BytesWritable.setSize (размер) делает пространство байтов равным 1,5 * размеру?
byte[] tmp = new byte[2];
tmp[0] = 0x01;
tmp[1] = 0x02;
BytesWritable outputKey = new BytesWritable();
outputKey.set(tmp, 0, 2);
Однако, когда я действую ключ в редукторе, который я получил от картографа, он сделал мне сюрприз:
byte[] reducerKey = key.getBytes();
reducerKey как Belows:
reducerKey[0] -> 0x01;
reducerKey[1] -> 0x02;
reducerKey[2] -> 0x00;
почему TMP, который я вход 2 байта длины, но когда я получил, он стал 3 байта длины.
Затем я прочитал исходный код BytesWritable.setSize (размер), я нашел это:
public void setSize(int size) {
if (size > getCapacity()) {
setCapacity(size * 3/2);
}
this.size = size;}
Так что, когда байты в в BytesWritable, почему структура данных создать 1,5 * размер пространства для байта []? Я думаю, что это пустая трата пространства, потому что пространство размером 0,5 * бесполезно.