如何从android中使用writeobject创建的文件中删除不需要的数据

时间:2011-12-14 06:31:46

标签: java android serialization

我是android / java的新手,实际上是c ++程序员。在我的android项目中,我想将一些结构化数据写入文件并使用C ++程序进行回读。但是书面数据文件包含带有一些不需要的数据的结构化数据如何在写入文件时避免不需要的数据。我也为我的程序粘贴代码,程序包含没有错误,仅供参考

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.io.Serializable;

import android.app.Activity;
import android.os.Bundle;
import android.util.Log;

public class TestAppActivity extends Activity implements Serializable {
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

    try {
    Example example = new Example();
    example.number = 50;
    example.name = "Test_Value";

        ObjectOutputStream out = new ObjectOutputStream( new FileOutputStream(new File(getCacheDir(),"")+"/text.dat"));
        out.writeObject((Example) example);
        out.close();

        ObjectInputStream in = new ObjectInputStream( new FileInputStream(new File(getCacheDir(), "") + "/text.dat"));
        Example readed = (Example)in.readObject();
        in.close();
        Log.e("Received", readed.number + " " + readed.name );
    } catch (Exception e) {
        // TODO Auto-generated catch block
        Log.e("__ERROR__", e.toString());           
    }
}

class Example implements Serializable {
    public int number;
    public String name;
}
}

提前致谢

2 个答案:

答案 0 :(得分:0)

ObjectOutputStream将您的对象写入specific format,以便其他Java程序稍后可以读取它。如果您想控制数据写入文件的方式,最好不要使用ObjectOutputStream并自行序列化数据,例如:作为xml或json。

或者您可以让对象实现Externalizable界面,但这需要您实现readExternalwriteExternal方法,因此您最终仍然会自行序列化对象。

答案 1 :(得分:0)

您需要一些自定义序列化,具体取决于所需的格式。由于字节序等的潜在问题,二进制格式会非常棘手。为此,您可以使用NIO字节缓冲区:

http://docs.oracle.com/javase/1.4.2/docs/api/java/nio/ByteBuffer.html

您可以在那里调整字节顺序并将二进制值存储在预定义的偏移量中。

如果可以接受基于文本的格式,我建议使用JSON数据绑定:

https://github.com/ko5tik/jsonserializer

这很简单:

JSONMarshaller.marshall(<outputStremWriterYouHaveToCreate>,<objectToSerialize>)

将对象(也是对象树,数组)编组为JSON数据流