// Simple getter
generate_java_doc(out, field);
- indent(out) << "public " << type_name(type);
- if (type->is_base_type() &&
- ((t_base_type*)type)->get_base() == t_base_type::TYPE_BOOL) {
- out << " is";
+ if (type->is_base_type() && ((t_base_type*)type)->is_binary()) {
+ indent(out) << "public byte[] get" << cap_name << "() {" << endl;
+ indent(out) << " set" << cap_name << "(TBaseHelper.rightSize(" << field_name << "));" << endl;
+ indent(out) << " return " << field_name << ".array();" << endl;
+ indent(out) << "}" << endl << endl;
+
+ indent(out) << "public ByteBuffer " << get_cap_name("bufferFor") << cap_name << "() {" << endl;
+ indent(out) << " return " << field_name << ";" << endl;
+ indent(out) << "}" << endl << endl;
} else {
- out << " get";
+ indent(out) << "public " << type_name(type);
+ if (type->is_base_type() &&
+ ((t_base_type*)type)->get_base() == t_base_type::TYPE_BOOL) {
+ out << " is";
+ } else {
+ out << " get";
+ }
+ out << cap_name << "() {" << endl;
+ indent_up();
+ indent(out) << "return this." << field_name << ";" << endl;
+ indent_down();
+ indent(out) << "}" << endl << endl;
}
- out << cap_name << "() {" << endl;
- indent_up();
- indent(out) << "return this." << field_name << ";" << endl;
- indent_down();
- indent(out) << "}" << endl << endl;
// Simple setter
generate_java_doc(out, field);
+ if (type->is_base_type() && ((t_base_type*)type)->is_binary()) {
+ indent(out) << "public ";
+ if (bean_style_) {
+ out << "void";
+ } else {
+ out << type_name(tstruct);
+ }
+ out << " set" << cap_name << "(byte[] " << field_name << ") {" << endl;
+ indent(out) << " set" << cap_name << "(ByteBuffer.wrap(" << field_name << "));" << endl;
+ if (!bean_style_) {
+ indent(out) << " return this;" << endl;
+ }
+ indent(out) << "}" << endl << endl;
+ }
indent(out) << "public ";
if (bean_style_) {
out << "void";
int extended = (b | 0x100) & 0x1ff;
return Integer.toHexString(extended).toUpperCase().substring(1);
}
+
+ public static byte[] byteBufferToByteArray(ByteBuffer byteBuffer) {
+ if (wrapsFullArray(byteBuffer)) {
+ return byteBuffer.array();
+ }
+ byte[] target = new byte[byteBuffer.remaining()];
+ byteBufferToByteArray(byteBuffer, target, 0);
+ return target;
+ }
+
+ public static boolean wrapsFullArray(ByteBuffer byteBuffer) {
+ return byteBuffer.hasArray()
+ && byteBuffer.position() == 0
+ && byteBuffer.arrayOffset() == 0
+ && byteBuffer.remaining() == byteBuffer.capacity();
+ }
+
+ public static int byteBufferToByteArray(ByteBuffer byteBuffer, byte[] target, int offset) {
+ int remaining = byteBuffer.remaining();
+ System.arraycopy(byteBuffer.array(),
+ byteBuffer.arrayOffset() + byteBuffer.position(),
+ target,
+ offset,
+ remaining);
+ return remaining;
+ }
+
+ public static ByteBuffer rightSize(ByteBuffer in) {
+ if (wrapsFullArray(in)) {
+ return in;
+ }
+ return ByteBuffer.wrap(byteBufferToByteArray(in));
+ }
}
*/
package org.apache.thrift;
+import java.nio.ByteBuffer;
import java.util.Arrays;
import java.util.HashMap;
import java.util.HashSet;
b.add(new byte[]{'a','b', 'a'});
assertTrue(TBaseHelper.compareTo(a, b) > 0);
}
+
+ public void testByteBufferToByteArray() throws Exception {
+ byte[] b1 = {10,9,8,7,6,5,4,3,2,1,0};
+ byte[] b2 = TBaseHelper.byteBufferToByteArray(ByteBuffer.wrap(b1));
+ assertEquals("b1 and b2 should be the exact same array (identity) due to fast path", b1, b2);
+
+ byte[] b3 = TBaseHelper.byteBufferToByteArray(ByteBuffer.wrap(b1, 1, 3));
+ assertEquals(3, b3.length);
+ assertEquals(ByteBuffer.wrap(b1, 1, 3), ByteBuffer.wrap(b3));
+ }
}
String resultString = deserializer.partialDeserializeString(serialize(level1SWU, factory), StructWithAUnion._Fields.TEST_UNION, TestUnion._Fields.STRUCT_FIELD, OneOfEach._Fields.SOME_CHARACTERS);
assertEquals(expectedString, resultString);
- byte[] expectedBinary = level3OneOfEach.getBase64().array();
+ byte[] expectedBinary = level3OneOfEach.getBase64();
ByteBuffer resultBinary = deserializer.partialDeserializeByteArray(serialize(level1SWU, factory), StructWithAUnion._Fields.TEST_UNION, TestUnion._Fields.STRUCT_FIELD, OneOfEach._Fields.BASE64);
assertEquals(expectedBinary.length, resultBinary.limit() - resultBinary.position() - resultBinary.arrayOffset());
assertEquals(ByteBuffer.wrap(expectedBinary), resultBinary);