Справочник API: Data
Класс Data — это неизменяемая обёртка над сырым буфером памяти (массивом байтов). Он используется в Skija для эффективной передачи двоичных данных (таких как закодированные изображения, шрифты или шейдеры) между Java и нативной библиотекой Skia на C++.
Создание
Из массива байтов Java
Копирует данные из Java byte[].
byte[] bytes = new byte[] { 1, 2, 3, 4 };
Data data = Data.makeFromBytes(bytes);Из файла
Эффективно отображает файл в память (используя mmap, где это возможно).
Data data = Data.makeFromFileName("assets/image.png");
if (data == null) {
System.err.println("File not found");
}Пустой
Создаёт пустой объект данных.
Data empty = Data.makeEmpty();Модификация (подмножество)
Поскольку Data неизменяем, вы не можете изменить его содержимое, но можете создать представление для его подмножества (без копирования, если поддерживается, или с дешёвым копированием).
// Создать новый объект Data, представляющий байты 10-20
Data subset = data.makeSubset(10, 10);Доступ к содержимому
Как массив байтов
Копирует нативные данные обратно в Java byte[].
byte[] content = data.getBytes();
// Или диапазон
byte[] part = data.getBytes(0, 10);Как ByteBuffer
Непосредственно оборачивает нативную память в Java ByteBuffer. Это наиболее эффективный способ чтения данных без копирования.
ByteBuffer buffer = data.toByteBuffer();
// Чтение из буфера...Размер
long size = data.getSize();Жизненный цикл
Data наследует Managed и использует нативную память. В идеале используйте try-with-resources или вызывайте close(), когда работа завершена, хотя сборщик мусора в конечном итоге освободит память.
try (Data data = Data.makeFromFileName("large_file.dat")) {
// использование data...
} // data.close() вызывается автоматически