почему не выполняется toByteArray ()? - PullRequest
0 голосов
/ 15 ноября 2011

Я пытался понять это часами, и это очень расстраивает!Я сериализую 'hashtable', который является объектом, который я передаю этому методу 'saveDataToDisk (Object o)', я проверил это в обычном проекте Java, и он правильно выполняет 'toByteArray ()', но в Androidон всегда попадает в ловушку всякий раз, когда он попадает вByteArray () ... есть идеи?Заранее спасибо.

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 ]

1 голос
/ 15 ноября 2011

Я пытался выполнить ваш вариант использования, похоже, работает для меня. См. Код ниже Я получаю массив байтов: [-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;
}

}
0 голосов
/ 15 ноября 2011

Я нашел это

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

...