Skip to content

API 参考:Data

Data 类是一个围绕原始内存缓冲区(字节数组)的不可变包装器。它在 Skija 中广泛用于在 Java 和原生 C++ Skia 库之间高效传递二进制数据(如编码的图像、字体或着色器)。

创建

从 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
// 创建一个表示字节 10-20 的新 Data 对象
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() 自动调用