Skip to content

Commit a7c8032

Browse files
authored
Add toByteBuffer to BinaryData (Azure#19795)
Add toByteBuffer to BinaryData
1 parent 0b7fdb4 commit a7c8032

File tree

3 files changed

+38
-0
lines changed

3 files changed

+38
-0
lines changed

sdk/core/azure-core/src/main/java/com/azure/core/util/BinaryData.java

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717
import java.io.InputStream;
1818
import java.io.UncheckedIOException;
1919
import java.nio.ByteBuffer;
20+
import java.nio.ReadOnlyBufferException;
2021
import java.nio.charset.Charset;
2122
import java.nio.charset.StandardCharsets;
2223
import java.util.Arrays;
@@ -593,6 +594,21 @@ public InputStream toStream() {
593594
return new ByteArrayInputStream(this.data);
594595
}
595596

597+
/**
598+
* Returns a read-only {@link ByteBuffer} representation of this {@link BinaryData}.
599+
* <p>
600+
* Attempting to mutate the returned {@link ByteBuffer} will throw a {@link ReadOnlyBufferException}.
601+
*
602+
* <p><strong>Get a read-only ByteBuffer from the BinaryData</strong></p>
603+
*
604+
* {@codesnippet com.azure.util.BinaryData.toByteBuffer}
605+
*
606+
* @return A read-only {@link ByteBuffer} representing the {@link BinaryData}.
607+
*/
608+
public ByteBuffer toByteBuffer() {
609+
return ByteBuffer.wrap(this.data).asReadOnlyBuffer();
610+
}
611+
596612
/* This will ensure lazy instantiation to avoid hard dependency on Json Serializer. */
597613
private static JsonSerializer getDefaultSerializer() {
598614
if (defaultJsonSerializer == null) {

sdk/core/azure-core/src/samples/java/com/azure/core/util/BinaryDataJavaDocCodeSnippet.java

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -656,6 +656,19 @@ public void toStream() throws IOException {
656656
// END: com.azure.core.util.BinaryData.toStream
657657
}
658658

659+
/**
660+
* Codesnippets for {@link BinaryData#toByteBuffer()}.
661+
*/
662+
public void toReadOnlyByteBuffer() {
663+
// BEGIN: com.azure.util.BinaryData.toByteBuffer
664+
final byte[] data = "Some Data".getBytes(StandardCharsets.UTF_8);
665+
BinaryData binaryData = BinaryData.fromBytes(data);
666+
final byte[] bytes = new byte[data.length];
667+
binaryData.toByteBuffer().get(bytes, 0, data.length);
668+
System.out.println(new String(bytes));
669+
// END: com.azure.util.BinaryData.toByteBuffer
670+
}
671+
659672
public static class MyJsonSerializer implements JsonSerializer {
660673
private final ClientLogger logger = new ClientLogger(BinaryDataTest.MyJsonSerializer.class);
661674
private final ObjectMapper mapper;

sdk/core/azure-core/src/test/java/com/azure/core/util/BinaryDataTest.java

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,12 +21,14 @@
2121
import java.io.OutputStream;
2222
import java.io.UncheckedIOException;
2323
import java.nio.ByteBuffer;
24+
import java.nio.ReadOnlyBufferException;
2425
import java.nio.charset.StandardCharsets;
2526
import java.util.ArrayList;
2627
import java.util.List;
2728

2829
import static org.junit.jupiter.api.Assertions.assertArrayEquals;
2930
import static org.junit.jupiter.api.Assertions.assertEquals;
31+
import static org.junit.jupiter.api.Assertions.assertThrows;
3032

3133
/**
3234
* Test class for {@link BinaryData}.
@@ -289,6 +291,13 @@ public void createFromNullByte() {
289291
assertEquals("", data.toString());
290292
}
291293

294+
@Test
295+
public void toReadOnlyByteBufferThrowsOnMutation() {
296+
BinaryData binaryData = BinaryData.fromString("Hello");
297+
298+
assertThrows(ReadOnlyBufferException.class, () -> binaryData.toByteBuffer().put((byte) 0));
299+
}
300+
292301
public static class MyJsonSerializer implements JsonSerializer {
293302
private final ClientLogger logger = new ClientLogger(MyJsonSerializer.class);
294303
private final ObjectMapper mapper;

0 commit comments

Comments
 (0)