Skip to content

Справочник API: Data

Класс Data — это неизменяемая обёртка над сырым буфером памяти (массивом байтов). Он используется в Skija для эффективной передачи двоичных данных (таких как закодированные изображения, шрифты или шейдеры) между Java и нативной библиотекой Skia на C++.

Создание

Из массива байтов Java

Копирует данные из Java byte[].

java
byte[] bytes = new byte[] { 1, 2, 3, 4 };
Data data = Data.makeFromBytes(bytes);

Из файла

Эффективно отображает файл в память (используя mmap, где это возможно).

java
Data data = Data.makeFromFileName("assets/image.png");
if (data == null) {
    System.err.println("File not found");
}

Пустой

Создаёт пустой объект данных.

java
Data empty = Data.makeEmpty();

Модификация (подмножество)

Поскольку Data неизменяем, вы не можете изменить его содержимое, но можете создать представление для его подмножества (без копирования, если поддерживается, или с дешёвым копированием).

java
// Создать новый объект Data, представляющий байты 10-20
Data subset = data.makeSubset(10, 10);

Доступ к содержимому

Как массив байтов

Копирует нативные данные обратно в Java byte[].

java
byte[] content = data.getBytes();

// Или диапазон
byte[] part = data.getBytes(0, 10);

Как ByteBuffer

Непосредственно оборачивает нативную память в Java ByteBuffer. Это наиболее эффективный способ чтения данных без копирования.

java
ByteBuffer buffer = data.toByteBuffer();
// Чтение из буфера...

Размер

java
long size = data.getSize();

Жизненный цикл

Data наследует Managed и использует нативную память. В идеале используйте try-with-resources или вызывайте close(), когда работа завершена, хотя сборщик мусора в конечном итоге освободит память.

java
try (Data data = Data.makeFromFileName("large_file.dat")) {
    // использование data...
} // data.close() вызывается автоматически