Github user cloud-fan commented on a diff in the pull request:
https://github.com/apache/spark/pull/19222#discussion_r172364728
--- Diff:
common/unsafe/src/main/java/org/apache/spark/unsafe/types/UTF8String.java ---
@@ -119,24 +121,33 @@ public static UTF8String blankString(int length) {
return fromBytes(spaces);
}
- protected UTF8String(Object base, long offset, int numBytes) {
+ protected UTF8String(byte[] bytes, long offset, int numBytes) {
+ this(new ByteArrayMemoryBlock(bytes, offset, numBytes));
+ }
+
+ protected UTF8String(MemoryBlock base) {
this.base = base;
- this.offset = offset;
- this.numBytes = numBytes;
+ if (base != null) {
+ if ((long) Integer.MAX_VALUE < base.size()) {
+ throw new ArrayIndexOutOfBoundsException(
+ "MemoryBlock.size " + base.size() + " should be less than " +
Integer.MAX_VALUE);
+ }
+ this.numBytes = (int) base.size();
+ }
}
// for serialization
public UTF8String() {
- this(null, 0, 0);
+ this(null);
}
/**
* Writes the content of this string into a memory address, identified
by an object and an offset.
* The target memory address must already been allocated, and have
enough space to hold all the
* bytes in this string.
*/
- public void writeToMemory(Object target, long targetOffset) {
- Platform.copyMemory(base, offset, target, targetOffset, numBytes);
+ public void writeToMemory(byte[] target, long targetOffset) {
--- End diff --
I don't see the point of restricting the parameter type for a public
method, as the actual implementation doesn't care about the type.
---
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]