版权声明:本文为博主原创文章,转载请注明出处:http://blog.csdn.net/w18756901575 https://blog.csdn.net/w18756901575/article/details/81129753
将对象保存在本地第一时间一般想到的都是ObjectOutput,但是我在网上无意中发现还可以将对象转为json字符串来保存,嘿,都点灯下黑了,一直在用json传输数据一时之间竟然没想到,我们在保存对象时候有时候并不需要保存信息,有时候只需要保存对这个对象来说最关键的变量即可
总结:将对象保存到本地的两种方法
1.保存成json字符串
2.ObjectOutputStream序列化到本地
需要注意的是在使用 序列化对象的时候,该对象需要实现Serializable接口
public static void saveObjectByObjectOutput(Object o, File file) {
try {
ObjectOutputStream objectOutputStream = new ObjectOutputStream(new FileOutputStream(file));
objectOutputStream.writeObject(o);
objectOutputStream.close();
} catch (IOException e) {
e.printStackTrace();
}
}
public static Object getObjectByObjectInput(File file) {
try {
ObjectInputStream inputStream = new ObjectInputStream(new FileInputStream(file));
Object o = inputStream.readObject();
inputStream.close();
return o;
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
public static void saveObjectByJson(File file, Object o) {
String json = new Gson().toJson(o);
try {
FileOutputStream fileOutputStream = new FileOutputStream(file);
fileOutputStream.write(json.getBytes());
fileOutputStream.close();
} catch (IOException e) {
e.printStackTrace();
}
}
public static Object getObjectByJson(File file, Class c) {
try {
FileInputStream fileInputStream = new FileInputStream(file);
StringBuilder stringBuilder = new StringBuilder();
int l = 0;
byte[] bs = new byte[1024];
while ((l = fileInputStream.read(bs)) != -1) {
stringBuilder.append(new String(bs, 0, l));
}
fileInputStream.close();
return new Gson().fromJson(stringBuilder.toString(), c);
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
另外送上Object和String互转的方法:
public static String ObjectToString(Object o) {
try {
ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
ObjectOutputStream objectOutputStream = new ObjectOutputStream(byteArrayOutputStream);
objectOutputStream.writeObject(o);
objectOutputStream.close();
byteArrayOutputStream.close();
return new BASE64Encoder().encode(byteArrayOutputStream.toByteArray());
} catch (IOException e) {
e.printStackTrace();
}
return null;
}
public static Object StringToObject(String str) {
try {
byte[] bs = new BASE64Decoder().decodeBuffer(str);
ByteArrayInputStream byteArrayInputStream = new ByteArrayInputStream(bs);
ObjectInputStream inputStream = new ObjectInputStream(byteArrayInputStream);
Object o = inputStream.readObject();
inputStream.close();
byteArrayInputStream.close();
return o;
} catch (Exception e) {
e.printStackTrace();
}
return null;
}