Add to/from disk stable format

This change adds a utility to convert persistable bundles to and from
disk-stable byte arrays.

Test: atest FrameworksVcnTests:PersistableBundleUtilsTest
Change-Id: Ifafb7081ec6a34ce3ab8e2aa502d46411405cb6d
This commit is contained in:
Benedict Wong
2022-05-03 04:29:38 +00:00
parent bde2853623
commit 823599b4a8
2 changed files with 35 additions and 0 deletions

View File

@@ -23,6 +23,8 @@ import android.os.PersistableBundle;
import com.android.internal.util.HexDump;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
@@ -295,6 +297,30 @@ public class PersistableBundleUtils {
return result;
}
/**
* Converts a PersistableBundle into a disk-stable byte array format
*
* @param bundle the PersistableBundle to be converted to a disk-stable format
* @return the byte array representation of the PersistableBundle
*/
@Nullable
public static byte[] toDiskStableBytes(@NonNull PersistableBundle bundle) throws IOException {
final ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
bundle.writeToStream(outputStream);
return outputStream.toByteArray();
}
/**
* Converts from a disk-stable byte array format to a PersistableBundle
*
* @param bytes the disk-stable byte array
* @return the PersistableBundle parsed from this byte array.
*/
public static PersistableBundle fromDiskStableBytes(@NonNull byte[] bytes) throws IOException {
final ByteArrayInputStream inputStream = new ByteArrayInputStream(bytes);
return PersistableBundle.readFromStream(inputStream);
}
/**
* Ensures safe reading and writing of {@link PersistableBundle}s to and from disk.
*

View File

@@ -267,6 +267,15 @@ public class PersistableBundleUtilsTest {
assertTrue(PersistableBundleUtils.isEqual(testBundle, minimized));
}
@Test
public void testToFromDiskStableBytes() throws Exception {
final PersistableBundle testBundle = getTestBundle();
final PersistableBundle result =
PersistableBundleUtils.fromDiskStableBytes(
PersistableBundleUtils.toDiskStableBytes(testBundle));
assertTrue(PersistableBundleUtils.isEqual(testBundle, result));
}
@Test
public void testEquality_identical() throws Exception {
final PersistableBundle left = getTestBundle();