HADOOP-17430. Restore ability to set Text to empty byte array (#2545)

Contributed by gaozhan.ding

Change-Id: Ib2ad9120c15c46a3fa2de9e3206875cbbc2363c2
This commit is contained in:
dgzdot 2021-01-06 05:09:41 +08:00 committed by Steve Loughran
parent 94c126cc9e
commit 9e85eb9a2e
2 changed files with 29 additions and 2 deletions

View File

@ -203,10 +203,19 @@ public class Text extends BinaryComparable
} }
} }
/** Set to a utf8 byte array /**
* Set to a utf8 byte array. If the length of <code>utf8</code> is
* <em>zero</em>, actually clear {@link #bytes} and any existing
* data is lost.
*/ */
public void set(byte[] utf8) { public void set(byte[] utf8) {
set(utf8, 0, utf8.length); if (utf8.length == 0) {
bytes = EMPTY_BYTES;
length = 0;
textLength = -1;
} else {
set(utf8, 0, utf8.length);
}
} }
/** copy a text. */ /** copy a text. */

View File

@ -449,4 +449,22 @@ public class TestText {
2, Text.utf8Length(new String(new char[]{(char)254}))); 2, Text.utf8Length(new String(new char[]{(char)254})));
} }
@Test
public void testSetBytes(){
Text a = new Text(new byte[100]);
assertEquals("testSetBytes100 getLength error !",
100, a.getLength());
assertEquals("testSetBytes100 getBytes.length error !",
100, a.getBytes().length);
assertEquals("testSetBytes100 getTextLength error !",
100, a.getTextLength());
a.set(new byte[0]);
assertEquals("testSetBytes0 getLength error !",
0, a.getLength());
assertEquals("testSetBytes0 getBytes.length error !",
0, a.getBytes().length);
assertEquals("testSetBytes0 getTextLength error !",
0, a.getTextLength());
}
} }