|
33 | 33 | package io.tiledb.java.api; |
34 | 34 |
|
35 | 35 | import io.tiledb.libtiledb.*; |
| 36 | +import java.nio.charset.Charset; |
36 | 37 | import java.nio.charset.StandardCharsets; |
37 | 38 |
|
38 | 39 | public class NativeArray implements AutoCloseable { |
@@ -197,9 +198,15 @@ private int getSize(Object buffer) throws TileDBError { |
197 | 198 | return ((long[]) buffer).length; |
198 | 199 | } |
199 | 200 | case TILEDB_STRING_ASCII: |
| 201 | + { |
| 202 | + Charset charset = StandardCharsets.ISO_8859_1; |
| 203 | + return stringToBytes((String) buffer, charset).length; |
| 204 | + } |
| 205 | + case TILEDB_STRING_UTF8: |
200 | 206 | case TILEDB_CHAR: |
201 | 207 | { |
202 | | - return stringToBytes(buffer).length; |
| 208 | + Charset charset = StandardCharsets.UTF_8; |
| 209 | + return stringToBytes((String) buffer, charset).length; |
203 | 210 | } |
204 | 211 | case TILEDB_DATETIME_YEAR: |
205 | 212 | case TILEDB_DATETIME_MONTH: |
@@ -277,10 +284,16 @@ private void createNativeArrayFromBuffer(Object buffer) throws TileDBError { |
277 | 284 | break; |
278 | 285 | } |
279 | 286 | case TILEDB_STRING_ASCII: |
| 287 | + { |
| 288 | + Charset charset = StandardCharsets.ISO_8859_1; |
| 289 | + int8_tArray = Utils.newInt8_tArray(stringToBytes((String) buffer, charset)); |
| 290 | + break; |
| 291 | + } |
| 292 | + case TILEDB_STRING_UTF8: |
280 | 293 | case TILEDB_CHAR: |
281 | 294 | { |
282 | | - byte[] bytes = stringToBytes(buffer); |
283 | | - int8_tArray = Utils.newInt8_tArray(bytes); |
| 295 | + Charset charset = StandardCharsets.UTF_8; |
| 296 | + int8_tArray = Utils.newInt8_tArray(stringToBytes((String) buffer, charset)); |
284 | 297 | break; |
285 | 298 | } |
286 | 299 | case TILEDB_DATETIME_YEAR: |
@@ -532,9 +545,19 @@ public void setItem(int index, Object value) throws ArrayIndexOutOfBoundsExcepti |
532 | 545 | break; |
533 | 546 | } |
534 | 547 | case TILEDB_STRING_ASCII: |
| 548 | + { |
| 549 | + Charset charset = StandardCharsets.ISO_8859_1; |
| 550 | + for (byte b : stringToBytes((String) value, charset)) { |
| 551 | + int8_tArray.setitem(index, b); |
| 552 | + index++; |
| 553 | + } |
| 554 | + break; |
| 555 | + } |
| 556 | + case TILEDB_STRING_UTF8: |
535 | 557 | case TILEDB_CHAR: |
536 | 558 | { |
537 | | - for (byte b : stringToBytes(value)) { |
| 559 | + Charset charset = StandardCharsets.UTF_8; |
| 560 | + for (byte b : stringToBytes((String) value, charset)) { |
538 | 561 | int8_tArray.setitem(index, b); |
539 | 562 | index++; |
540 | 563 | } |
@@ -607,6 +630,7 @@ public SWIGTYPE_p_void toVoidPointer() throws TileDBError { |
607 | 630 | return PointerUtils.toVoid(uint64_tArray); |
608 | 631 | } |
609 | 632 | case TILEDB_STRING_ASCII: |
| 633 | + case TILEDB_STRING_UTF8: |
610 | 634 | case TILEDB_CHAR: |
611 | 635 | { |
612 | 636 | return PointerUtils.toVoid(int8_tArray); |
@@ -778,6 +802,7 @@ public Object toJavaArray(int position, int elements) throws TileDBError { |
778 | 802 | return Utils.int64ArrayGet(uint64_tArray, position, elements); |
779 | 803 | } |
780 | 804 | case TILEDB_STRING_ASCII: |
| 805 | + case TILEDB_STRING_UTF8: |
781 | 806 | case TILEDB_CHAR: |
782 | 807 | { |
783 | 808 | return Utils.int8ArrayGet(int8_tArray, position, elements); |
@@ -872,6 +897,8 @@ private void createNativeArrayFromVoidPointer(SWIGTYPE_p_p_void pointer) throws |
872 | 897 | int64_tArray = PointerUtils.int64_tArrayFromVoid(pointer); |
873 | 898 | break; |
874 | 899 | } |
| 900 | + case TILEDB_STRING_ASCII: |
| 901 | + case TILEDB_STRING_UTF8: |
875 | 902 | case TILEDB_CHAR: |
876 | 903 | { |
877 | 904 | int8_tArray = PointerUtils.int8_tArrayFromVoid(pointer); |
@@ -959,8 +986,8 @@ private void createNativeArrayFromVoidPointer(SWIGTYPE_p_void pointer) throws Ti |
959 | 986 | } |
960 | 987 | } |
961 | 988 |
|
962 | | - private byte[] stringToBytes(Object buffer) { |
963 | | - return ((String) buffer).getBytes(StandardCharsets.UTF_8); |
| 989 | + private byte[] stringToBytes(String buffer, Charset charset) { |
| 990 | + return buffer.getBytes(charset); |
964 | 991 | } |
965 | 992 |
|
966 | 993 | protected Datatype getNativeType() { |
|
0 commit comments