package by.istin.android.xcore.utils; import android.content.ContentValues; import android.content.Intent; import android.os.Bundle; import android.os.Parcel; import android.os.Parcelable; import android.text.Spanned; import android.text.TextUtils; import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.io.IOException; import java.io.ObjectInput; import java.io.ObjectInputStream; import java.io.ObjectOutput; import java.io.ObjectOutputStream; import java.io.Serializable; public class BytesUtils { public static byte[] toByteArray(ContentValues contentValues) { Parcel obtain = Parcel.obtain(); contentValues.writeToParcel(obtain, 0); byte[] byteArray = obtain.marshall(); obtain.recycle(); return byteArray; } public static byte[] toByteArray(Bundle bundle) { Parcel obtain = Parcel.obtain(); bundle.writeToParcel(obtain, 0); byte[] byteArray = obtain.marshall(); obtain.recycle(); return byteArray; } public static byte[] toByteArray(Intent intent) { Parcel obtain = Parcel.obtain(); intent.writeToParcel(obtain, 0); byte[] byteArray = obtain.marshall(); obtain.recycle(); return byteArray; } public static byte[] toByteArray(Parcelable parcelable) { Parcel obtain = Parcel.obtain(); parcelable.writeToParcel(obtain, 0); byte[] byteArray = obtain.marshall(); obtain.recycle(); return byteArray; } public static byte[] toByteArray(Spanned spanned) { Parcel obtain = Parcel.obtain(); TextUtils.writeToParcel(spanned, obtain, 0); byte[] byteArray = obtain.marshall(); obtain.recycle(); return byteArray; } public static byte[] arrayToByteArray(ContentValues[] contentValues) { Parcel obtain = Parcel.obtain(); obtain.writeParcelableArray(contentValues, 0); byte[] byteArray = obtain.marshall(); obtain.recycle(); return byteArray; } public static ContentValues contentValuesFromByteArray(byte[] byteArray) { Parcel obtain = Parcel.obtain(); obtain.unmarshall(byteArray, 0, byteArray.length); obtain.setDataPosition(0); ContentValues createFromParcel = ContentValues.CREATOR.createFromParcel(obtain); obtain.recycle(); return createFromParcel; } public static <T extends Parcelable> T parcelableFromByteArray(Parcelable.Creator<T> creator, byte[] byteArray) { Parcel obtain = Parcel.obtain(); obtain.unmarshall(byteArray, 0, byteArray.length); obtain.setDataPosition(0); T createFromParcel = creator.createFromParcel(obtain); obtain.recycle(); return createFromParcel; } public static Intent intentFromByteArray(byte[] byteArray) { Parcel obtain = Parcel.obtain(); obtain.unmarshall(byteArray, 0, byteArray.length); obtain.setDataPosition(0); Intent createFromParcel = Intent.CREATOR.createFromParcel(obtain); obtain.recycle(); return createFromParcel; } public static Spanned spannedFromByteArray(byte[] byteArray) { if (byteArray == null) { return null; } Parcel obtain = Parcel.obtain(); obtain.unmarshall(byteArray, 0, byteArray.length); obtain.setDataPosition(0); Spanned result = (Spanned)TextUtils.CHAR_SEQUENCE_CREATOR. createFromParcel(obtain); obtain.recycle(); return result; } public static Bundle bundleFromByteArray(byte[] byteArray) { Parcel obtain = Parcel.obtain(); obtain.unmarshall(byteArray, 0, byteArray.length); obtain.setDataPosition(0); Bundle result = Bundle.CREATOR.createFromParcel(obtain); obtain.recycle(); return result; } public static ContentValues[] arrayContentValuesFromByteArray(byte[] byteArray) { Parcel obtain = Parcel.obtain(); obtain.unmarshall(byteArray, 0, byteArray.length); obtain.setDataPosition(0); Parcelable[] contentValues = obtain.readParcelableArray(ContentValues.class.getClassLoader()); ContentValues[] values = new ContentValues[contentValues.length]; for (int i = 0; i < contentValues.length; i++) { values[i] = (ContentValues) contentValues[i]; } obtain.recycle(); return values; } public static byte[] toByteArray(Serializable serializable) { if (serializable == null) { return null; } ByteArrayOutputStream bos = null; ObjectOutput out = null; try { bos = new ByteArrayOutputStream(); out = new ObjectOutputStream(bos); out.writeObject(serializable); return bos.toByteArray(); } catch (IOException e) { throw new IllegalArgumentException(e); } finally { IOUtils.close(bos); IOUtils.close(out); } } public static Serializable serializableFromByteArray(byte[] bytes) { if (bytes == null) { return null; } ByteArrayInputStream bis = null; ObjectInput in = null; try { bis = new ByteArrayInputStream(bytes); in = new ObjectInputStream(bis); Serializable o; o = (Serializable) in.readObject(); return o; } catch (ClassNotFoundException e) { throw new IllegalArgumentException(e); } catch (IOException e) { throw new IllegalArgumentException(e); } finally { IOUtils.close(bis); IOUtils.close(in); } } }