/**@class android.app.backup.BackupDataInput @extends java.lang.Object Provides the structured interface through which a {@link android.app.backup.BackupAgent} reads information from the backup data set, via its {@link android.app.backup.BackupAgent#onRestore(BackupDataInput, int, android.os.ParcelFileDescriptor) onRestore()} method. The data is presented as a set of "entities," each representing one named record as previously stored by the agent's {@link android.app.backup.BackupAgent#onBackup(ParcelFileDescriptor,BackupDataOutput,ParcelFileDescriptor) onBackup()} implementation. An entity is composed of a descriptive header plus a byte array that holds the raw data saved in the remote backup. <p> The agent must consume every entity in the data stream, otherwise the restored state of the application will be incomplete. <h3>Example</h3> <p> A typical {@link android.app.backup.BackupAgent#onRestore(BackupDataInput,int,ParcelFileDescriptor) onRestore()} implementation might be structured something like this: <pre> public void onRestore(BackupDataInput data, int appVersionCode, ParcelFileDescriptor newState) { while (data.readNextHeader()) { String key = data.getKey(); int dataSize = data.getDataSize(); if (key.equals(MY_BACKUP_KEY_ONE)) { // process this kind of record here byte[] buffer = new byte[dataSize]; data.readEntityData(buffer, 0, dataSize); // reads the entire entity at once // now 'buffer' holds the raw data and can be processed however // the agent wishes processBackupKeyOne(buffer); } else if (key.equals(MY_BACKUP_KEY_TO_IGNORE) { // a key we recognize but wish to discard data.skipEntityData(); } // ... etc. } }</pre> */ var BackupDataInput = { /**Extract the next entity header from the restore stream. After this method return success, the {@link #getKey}() and {@link #getDataSize}() methods can be used to inspect the entity that is now available for processing. @return {Boolean} <code>true</code> when there is an entity ready for consumption from the restore stream, <code>false</code> if the restore stream has been fully consumed. @throws IOException if an error occurred while reading the restore stream */ readNextHeader : function( ) {}, /**Report the key associated with the current entity in the restore stream @return {String} the current entity's key string @throws IllegalStateException if the next record header has not yet been read */ getKey : function( ) {}, /**Report the size in bytes of the data associated with the current entity in the restore stream. @return {Number} The size of the record's raw data, in bytes @throws IllegalStateException if the next record header has not yet been read */ getDataSize : function( ) {}, /**Read a record's raw data from the restore stream. The record's header must first have been processed by the {@link #readNextHeader}() method. Multiple calls to this method may be made in order to process the data in chunks; not all of it must be read in a single call. Once all of the raw data for the current entity has been read, further calls to this method will simply return zero. @param {Object {byte[]}} data An allocated byte array of at least 'size' bytes @param {Number} offset Offset within the 'data' array at which the data will be placed when read from the stream @param {Number} size The number of bytes to read in this pass @return {Number} The number of bytes of data read. Once all of the data for this entity has been read, further calls to this method will return zero. @throws IOException if an error occurred when trying to read the restore data stream */ readEntityData : function( ) {}, /**Consume the current entity's data without extracting it into a buffer for further processing. This allows a {@link android.app.backup.BackupAgent} to efficiently discard obsolete or otherwise uninteresting records during the restore operation. @throws IOException if an error occurred when trying to read the restore data stream */ skipEntityData : function( ) {}, };