D
davidxiongcn
I need to convert an object to String to store it into structure in our
application, so I write some function to convert Object into byte[] and
convert it back. The following is a test program:
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.ibjectInputStream;
import java.ibjectOutputStream;
public class test {
private static Object getObjectFromByteArr(byte [] byteArr) throws
java.io.IOException, ClassNotFoundException {
ObjectInputStream in = new ObjectInputStream(new
ByteArrayInputStream(byteArr));
Object obj = in.readObject();
in.close();
return obj;
}
private static byte [] getBlobFromObject(Object obj) throws
java.io.IOException {
ByteArrayOutputStream out = new ByteArrayOutputStream();
ObjectOutputStream objOut = new ObjectOutputStream(out);
objOut.writeObject(obj);
byte [] bytes = out.toByteArray();
objOut.close();
return bytes;
}
public static void main(String [] args) {
try {
Integer i = new Integer(0);
// it's OK here
Integer j = (Integer)getObjectFromByteArr(getBlobFromObject(i));
System.out.println(j);
// try to convert byte[] to String
String str = new String(getBlobFromObject(i));
// and convert it back, exception occurs!!!
Integer k = (Integer)getObjectFromByteArr(str.getBytes());
System.out.println(k);
} catch (Exception e) {
e.printStackTrace();
}
}
}
But it always report a java.io.InvalidClassException, as it seems the
serialVersionUID has been changed when I convert it to String. I have
compared the convert result and the result of String.getBytes(), they
are different. But I have no idea about how to fix it.
What's wrong with it when I convert a byte[] to String? I tried to use
a characterset in creating new String, the problem remains.
application, so I write some function to convert Object into byte[] and
convert it back. The following is a test program:
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.ibjectInputStream;
import java.ibjectOutputStream;
public class test {
private static Object getObjectFromByteArr(byte [] byteArr) throws
java.io.IOException, ClassNotFoundException {
ObjectInputStream in = new ObjectInputStream(new
ByteArrayInputStream(byteArr));
Object obj = in.readObject();
in.close();
return obj;
}
private static byte [] getBlobFromObject(Object obj) throws
java.io.IOException {
ByteArrayOutputStream out = new ByteArrayOutputStream();
ObjectOutputStream objOut = new ObjectOutputStream(out);
objOut.writeObject(obj);
byte [] bytes = out.toByteArray();
objOut.close();
return bytes;
}
public static void main(String [] args) {
try {
Integer i = new Integer(0);
// it's OK here
Integer j = (Integer)getObjectFromByteArr(getBlobFromObject(i));
System.out.println(j);
// try to convert byte[] to String
String str = new String(getBlobFromObject(i));
// and convert it back, exception occurs!!!
Integer k = (Integer)getObjectFromByteArr(str.getBytes());
System.out.println(k);
} catch (Exception e) {
e.printStackTrace();
}
}
}
But it always report a java.io.InvalidClassException, as it seems the
serialVersionUID has been changed when I convert it to String. I have
compared the convert result and the result of String.getBytes(), they
are different. But I have no idea about how to fix it.
What's wrong with it when I convert a byte[] to String? I tried to use
a characterset in creating new String, the problem remains.