Skip to content

Commit ae2b956

Browse files
committed
Add new constructor for char[] with charset
fixes #8
1 parent 6881003 commit ae2b956

File tree

2 files changed

+25
-3
lines changed

2 files changed

+25
-3
lines changed

src/main/java/at/favre/lib/bytes/Bytes.java

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -454,7 +454,21 @@ public static Bytes from(CharSequence string, Charset charset) {
454454
* @return new instance
455455
*/
456456
public static Bytes from(char[] charArray) {
457-
return from(CharBuffer.wrap(charArray).toString(), StandardCharsets.UTF_8);
457+
return from(charArray, StandardCharsets.UTF_8);
458+
}
459+
460+
/**
461+
* Creates a new instance from given char array. The array will be handles like an encoded string
462+
*
463+
* @param charArray to get the internal byte array from
464+
* @param charset charset to be used to decode the char array
465+
* @return new instance
466+
*/
467+
public static Bytes from(char[] charArray, Charset charset) {
468+
ByteBuffer bb = charset.encode(CharBuffer.wrap(charArray));
469+
byte[] bytes = new byte[bb.remaining()];
470+
bb.get(bytes);
471+
return from(bytes);
458472
}
459473

460474
/**

src/test/java/at/favre/lib/bytes/BytesConstructorTests.java

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -264,6 +264,12 @@ public void fromCharArray() {
264264
checkCharArray("\t");
265265
checkCharArray("a");
266266
checkCharArray("12345678abcdefjkl");
267+
checkCharArray("é_,,(8áàäöü#+_ ,,mµ");
268+
269+
String s1 = "oaisdj`ßß__.#äöü_- *aé";
270+
assertArrayEquals(String.valueOf(s1.toCharArray()).getBytes(StandardCharsets.ISO_8859_1), Bytes.from(s1.toCharArray(), StandardCharsets.ISO_8859_1).array());
271+
assertArrayEquals(String.valueOf(s1.toCharArray()).getBytes(StandardCharsets.UTF_16), Bytes.from(s1.toCharArray(), StandardCharsets.UTF_16).array());
272+
assertArrayEquals(String.valueOf(s1.toCharArray()).getBytes(StandardCharsets.UTF_8), Bytes.from(s1.toCharArray(), StandardCharsets.UTF_8).array());
267273
}
268274

269275
@Test
@@ -287,8 +293,10 @@ private void checkString(String string, Charset charset) {
287293
}
288294

289295
private void checkCharArray(String s) {
290-
Bytes b = Bytes.from(s.toCharArray());
291-
assertArrayEquals(String.valueOf(s.toCharArray()).getBytes(StandardCharsets.UTF_8), b.array());
296+
Bytes b1 = Bytes.from(s.toCharArray());
297+
Bytes b2 = Bytes.from(s.toCharArray(), StandardCharsets.UTF_8);
298+
assertArrayEquals(String.valueOf(s.toCharArray()).getBytes(StandardCharsets.UTF_8), b1.array());
299+
assertArrayEquals(String.valueOf(s.toCharArray()).getBytes(StandardCharsets.UTF_8), b2.array());
292300
}
293301

294302
@Test

0 commit comments

Comments
 (0)