0

我一直在努力解决这个问题好几个小时,这太令人沮丧了!我正在序列化一个“哈希表”,这是我传递给这个方法“saveDataToDisk(Object o)”的对象,我在一个普通的java项目中测试了它,它正确地执行了“toByteArray()”,但是在Android中每当它碰到 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;
    }
}
4

2 回答 2

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;
}

}
于 2011-11-15T02:53:59.533 回答
0

我发现了这个

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()

于 2011-11-15T02:54:02.047 回答