为什么不会“toByteArray()”执行?

时间:2011-11-15 02:18:35

标签: android serialization bytearray save objectoutputstream

我一直试图弄清楚这几个小时,这太令人沮丧了! 我正在序列化一个'哈希表',这是我传递给这个方法的对象 'saveDataToDisk(Object o)',我在一个普通的java项目中对它进行了测试,它正确地执行了'toByteArray()',但是在Android中它总是进入catch,只要它遇到toByteArray()......任何想法?提前谢谢。

public static byte[] saveDataToDisk(Object o)
{
    // Storing the data into byte streams.
    ByteArrayOutputStream bos = new ByteArrayOutputStream();

    try
    {
        ObjectOutputStream out = new ObjectOutputStream(bos);
        out.writeObject(o);
        out.close();
        // Get the bytes of the serialized object
        byte[] buf = bos.toByteArray();

        return buf;
    }
    catch (IOException ioe)
    {
        return null;
    }
}

2 个答案:

答案 0 :(得分:1)

我试图执行你的用例,似乎对我有用。 请参阅下面的代码 我得到一个字节数组:[ - 84,-19,0,5,116,0,2,72,105]

public class WriteObject extends Activity {

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main_1);
    Button button1 = (Button) findViewById(R.id.button1);
    button1.setOnClickListener(new OnClickListener(){
        String s = "Hi";
        @Override
        public void onClick(View v) {
            byte[] b = WriteObject.saveDataToDisk(s);
            Log.i("", b.toString());

        }

    });
}
public static byte[] saveDataToDisk(Object o){
    ByteArrayOutputStream bos = new ByteArrayOutputStream();
    byte[] buf = null;
    try{
        ObjectOutputStream out = new ObjectOutputStream(bos);
        out.writeObject(o);
        out.close();
        buf = bos.toByteArray();
    }catch (IOException ioe){
        Log.e("", ioe.toString(),ioe);
    }
    return buf;
}

}

答案 1 :(得分:0)

我找到了this

ByteArrayOutputStream bos = new ByteArrayOutputStream();
ObjectOutputStream oos = new ObjectOutputStream(bos);
oos.writeObject(obj);
oos.flush();
oos.close();
bos.close();
byte [] data = bos.toByteArray();
return data;

所以你可能想尝试out.flush()