(小白)用java保存(读取)对象到本地 对象中所有的调用的类都要实现Serializable接口吗
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了(小白)用java保存(读取)对象到本地 对象中所有的调用的类都要实现Serializable接口吗相关的知识,希望对你有一定的参考价值。
假如有个学生类 里面有方法使用了Scanner 而Scanner类是没有实现 Serializable 的 ,这样我用ArrayList存这个学生类 在用对象流存这个ArrayList是不是没有办法存的? 望大神解答
你只需要把要保存到本地的对象序列化就行了,比如学生类实现序列化接口。Scanner,List这些是java自带的。 参考技术A 不同的两种液体混合后,有可能分层。比如食油和水混合。 参考技术B 瑶瑟怨(温庭筠)Java 保存对象到本地
将对象保存在本地第一时间一般想到的都是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;
以上是关于(小白)用java保存(读取)对象到本地 对象中所有的调用的类都要实现Serializable接口吗的主要内容,如果未能解决你的问题,请参考以下文章