APIリファレンス: Data
Dataクラスは、生のメモリバッファ(バイト配列)を不変(immutable)にラップするクラスです。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()が自動的に呼び出される