现在写我有这个类,我希望能够使用序列化保存和打开:
public class Region
implements Serializable
{
private final int inputNumberOfColumnsAlongXAxis;
private final int inputNumberOfColumnsAlongYAxis;
private double inputDataScaleReductionOnXAxis;
private double inputDataScaleReductionOnYAxis;
private int numberOfColumnsAlongXAxis;
private int numberOfColumnsAlongYAxis;
private int cellsPerColumn; // Z-Axis dimension
private float inhibitionRadius;
private final float percentMinimumOverlapScore;
private final float minimumOverlapScore;
// ----------------------------------------------------------
/**
* Save the current Region object on the view into a file named
* "TrainedRegion".
*/
public static byte[] serializeObject(Object region)
{
// TODO: save with current timestamp and use open pop-up
// String timeStamp = "" + System.currentTimeMillis() / 1000;
// String fileName = ("Region created at timestamp(seconds): " +
// timeStamp);
ByteArrayOutputStream baos = new ByteArrayOutputStream();
try {
ObjectOutput objectOutput = new ObjectOutputStream(baos);
objectOutput.writeObject(region);
objectOutput.close();
// Get the bytes of the serialized object
byte[] bytesOfSerializedObject = baos.toByteArray();
return bytesOfSerializedObject;
} catch(IOException ioe) {
Log.e("serializeObject", "error", ioe);
return null;
}
}
// ----------------------------------------------------------
/**
* Returns a previously saved Region object with the given name.
*
* @param fileName
* @return A previously saved Region object.
*/
public static Object deserializeObject(byte[] bytes)
{
// TODO: later read Region object saved in file named by the time stamp during
// saving.
// ObjectInputStream inputStream = new ObjectInputStream(new
// FileInputStream(fileName));
try {
ObjectInputStream in = new ObjectInputStream(new ByteArrayInputStream(bytes));
Object object = in.readObject();
in.close();
return object;
} catch(ClassNotFoundException cnfe) {
Log.e("deserializeObject", "class not found error", cnfe);
return null;
} catch(IOException ioe) {
Log.e("deserializeObject", "io error", ioe);
return null;
}
}
}
以下是我的“屏幕”类,它充当我上面的模型和我的视图(屏幕)的控制器:
// ----------------------------------------------------------
/**
* I want to be able to open a Region instance that was saved.
*/
public void openClicked()
{
// open the file created below in save method and write all the bytes into
// the global region instance for this class. How can do this?
this.region = (Region) this.region.deserializeObject(savedRegionInBytes);
}
// ----------------------------------------------------------
/**
*
*/
public void saveClicked()
{
this.savedRegionInBytes = this.region.serializeObject(this.region);
// TODO: write savedRegionInBytes to a file. How can I do this?
}
此外,如果有更简单的方法将对象序列化为android中的文件,我很乐意听到它。谢谢!
答案 0 :(得分:2)
基本上就是这样做的方法。但是你不必像你那样处理字节。 我使用这两种方法将Serializable对象写入和读取到Android应用程序中的私有文件。
public static boolean saveRegion(Context context, Region region) {
try {
FileOutputStream fos = context.openFileOutput(REGION_FILENAME, Context.MODE_PRIVATE);
ObjectOutputStream oos = new ObjectOutputStream(fos);
oos.writeObject(region);
oos.close();
} catch (IOException e) {
e.printStackTrace();
return false;
}
return true;
}
public static Region getRegion(Context context) {
try {
FileInputStream fis = context.openFileInput(REGION_FILENAME);
ObjectInputStream is = new ObjectInputStream(fis);
Object readObject = is.readObject();
is.close();
if(readObject != null && readObject instanceof Region) {
return (Region) readObject;
}
} catch (IOException e) {
e.printStackTrace();
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
return null;
}