我一直试图弄清楚这几个小时,这太令人沮丧了! 我正在序列化一个'哈希表',这是我传递给这个方法的对象 '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;
}
}
答案 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()