Android 为什么赢了';";toByteArray();执行?

Android 为什么赢了';";toByteArray();执行?,android,serialization,bytearray,save,objectoutputstream,Android,Serialization,Bytearray,Save,Objectoutputstream,几个小时来我一直在想这个问题,这太令人沮丧了! 我正在序列化一个“哈希表”,它是我传递给这个方法的对象 “saveDataToDisk(Object o)”,我在一个常规java项目中对此进行了测试,它正确地执行了“toByteArray()”,但在Android中,每当它碰到toByteArray(),它总是会被捕获。。。有什么想法吗?先谢谢你 public static byte[] saveDataToDisk(Object o) { // Storing the data int

几个小时来我一直在想这个问题,这太令人沮丧了! 我正在序列化一个“哈希表”,它是我传递给这个方法的对象 “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;
    }
}

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

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

}
我发现


因此,您可能需要尝试.flush()

您得到的异常是什么?没有异常,我返回NULL,当我尝试执行“ioe.printStackTrace()”时,没有打印任何内容。如果我似乎无法解决这个问题,有人有其他选择吗?>:如果在catch语句中放置断点,则应该能够检查ioe变量。或者把它放在上面,跨过一步,直到它碰到钩子。编辑:同时,在那里检查bos变量的大小。如果它有数据,它应该>0WOW。。。答案是,我不能将return语句放在“try”块中。。。我从来都不知道。@ObjectiveC InLearning,是的,你可以,你能解释为什么我上面的代码不起作用,但当我把“return buf”移到外面时,它起作用了吗?你可能是对的,但我只是好奇。
ByteArrayOutputStream bos = new ByteArrayOutputStream();
ObjectOutputStream oos = new ObjectOutputStream(bos);
oos.writeObject(obj);
oos.flush();
oos.close();
bos.close();
byte [] data = bos.toByteArray();
return data;