如何将可序列化的对象写入字符串而不写入文件?



我想写一个类对象到字符串,然后再次从它创建一个对象。我在网上搜索,但我发现的只是写一个对象到文件,但我想写在字符串中,而不是在文件上。

下面是写文件的例子,我想写在String或类似的Object中,而不是在文件中。

some_class implements serializable {
...
}
FileOutputStream f = new FileOutputStream(new File("myObjects.txt"));
ObjectOutputStream o = new ObjectOutputStream(f);
// Write objects to file
o.writeObject(object1);
o.close();
f.close();
FileInputStream fi = new FileInputStream(new File("myObjects.txt"));
ObjectInputStream oi = new ObjectInputStream(fi);
// Read objects
some_class object2 = (some_class) oi.readObject();
oi.close();
fi.close();

请同样帮助。

这是一种方式:

try 
{
// To String
ByteArrayOutputStream bos = new ByteArrayOutputStream();
ObjectOutputStream os = new ObjectOutputStream(bos);
os.writeObject(object1);
String serializedObject1 = bos.toString();
os.close();
// To Object 
ByteArrayInputStream bis = new ByteArrayInputStream(serializedObject1.getBytes());
ObjectInputStream oInputStream = new ObjectInputStream(bis);
YourObject restoredObject1 = (YourObject) oInputStream.readObject();            
oInputStream.close();
} catch(Exception ex) {
ex.printStackTrace();
}

我更喜欢Base64的方式。

这是一个编码的例子:

private static String serializableToString( Serializable o ) throws IOException {
ByteArrayOutputStream baos = new ByteArrayOutputStream();
ObjectOutputStream oos = new ObjectOutputStream(baos);
oos.writeObject(o);
oos.close();
return Base64.getEncoder().encodeToString(baos.toByteArray()); 
}

这是一个解码的例子:

private static Object objectFromString(String s) throws IOException, ClassNotFoundException 
{
byte [] data = Base64.getDecoder().decode(s);
ObjectInputStream ois = new ObjectInputStream( 
new ByteArrayInputStream(data));
Object o  = ois.readObject();
ois.close();
return o;
}

将对象序列化为String的最佳方法,反之亦然,您应该将对象转换为JSON String并编码为base64。并获得对象解码base64和转换为对象使用GSON(开源谷歌提供java库)

class foo{ String name, email;
//setter getter
}

将Object转换为base64 JSON

public static String convertToJson(Object o){
String result=new Gson().toJson(o);
return Base64.getEncoder().encodeToString(result);
}

//读取base64

public static <T> T convertJsonToObject(String base64Object,Class<T> classOfT){
Gson gson = new Gson();
return gson.fromJson(new InputStreamReader(new ByteArrayInputStream(Base64.getDecoder().decode(base64Object))),classOfT);
}
public static void main(String[] args) {
foo obj=new foo("jhon","jhon@gamil.com");
String json=convertToJson(foo);
System.out.println(json);
foo obj_fromJson=convertJsonToObject(json,foo.class);
System.out.println(obj_fromJson.getName());
}

相关内容

  • 没有找到相关文章

最新更新