Android中关于保存Object(ObjectOutput/InputStream)的几个问题

我是一只刚入坑的萌新……
最近写了个程序,其中需要保存很多不同种类的数据,于是就用ObjectOutputStream和ObjectInputStream保存了一个类,也能够正常读取,但发现一个问题,当软件重新安装(如版本升级)后,就无法读取以前保存下来的类了!(我是保存在SD卡中的,data文件也没有丢失)然后再用新的软件保存数据,又可以正常读取。搞不懂啊!我也没有改版本和签名,包名也一样,是一个软件,为什么重装后就不能读取了?求大神解答!!图片说明

0

5个回答

最好帖一下关键代码,还有不能正常读取有报什么异常信息吗?最好也把这关系的信息发出来。

0

public class DataUtils
{
private static DataUtils mDataUtils;
public final static String sdcard=Environment.getExternalStorageDirectory().getAbsolutePath();
private HashMap mObjectMap=new HashMap();
public final static String path=sdcard+"/.com.hider/";

public synchronized static DataUtils getDataUtils() {
    if(mDataUtils == null) {
        mDataUtils=new DataUtils();
    }
    return mDataUtils;
}

private DataUtils() {
    if(!new File(sdcard+"/.com.hider/").exists()) {
        new File(sdcard+"/.com.hider/").mkdir();
    }
}

public void putData(String key, String content) {
    mStringMap.put(key, content);
}
public String getData(String key) {
    return mStringMap.get(key);
}
public void putObject(String key, Object content) {
    mObjectMap.put(key, content);
}
public Object getObject(String key) {
    return mObjectMap.get(key);
}

public static void saveData() {
    if(!new File(path).exists()) {
        new File(path).mkdir();
    }
    try
    {
        FileOutputStream output=new FileOutputStream(path + "data");
        ObjectOutputStream objectoutput=new ObjectOutputStream(output);
        objectoutput.writeObject(mDataUtils);
        objectoutput.close();
    }
    catch (Exception e)
    {}

}

public static void loadData() {
    if(!new File(path+"data").exists()) {
        return;
    }
    try
    {
        FileInputStream input=new FileInputStream(path + "data");
        ObjectInputStream objectinput=new ObjectInputStream(input);
        mDataUtils=(DataUtils) objectinput.readObject();
        objectinput.close();
    }
    catch (Exception e)
    {}
}

}

0

你保存的数据,你可以在下次保存前去读出来,看看还有木有

0

为什么要这么麻烦呢,直接用sqllite或者是SharedPreferences不久好了么,你这太麻烦了

0

流的写入读出都是固定代码不会出错。

有问题的话 应该 是 每次读的时候看下文件父目录是否创建、文件是否存在,打log判断下

0
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
(五)java.io.ObjectInput接口详解
简介:ObjectInput接口继承了DataInput、AutoCloseable接口包括对象的阅读功能,DataInput接口包括输入原始数据类型的方法,ObjectInput接口扩展接口包括数组、对象、字符串。nn1.public Object readObject() throws ClassNotFoundException, IOException;nn分析:读取并返回一个对象,实现此...
android 打开pdf文件 从inputStream读取数据并保存为文件
/**n * 打开pdf 文件,Get PDF file Intent。n * @param path 文件路径n * @returnn */npublic static Intent getPdfFileIntent(String path) {n    Intent i = new Intent(Intent.ACTION_VIEW);n    i.addCategory(Intent.CAT
将InputStream写入本地文件
/**n* 将InputStream写入本地文件n* @param destination 写入本地目录n* @param inputn输入流n* @throws IOExceptionn*/nprivate static void writeToLocal(String destination, InputStream input)nthrows IOException {ni
深入理解Java序列化机制:ObjectOutputStream源码简要分析
一、引言nnjava.io.ObjectOutputStream是实现序列化的关键类,它可以将一个对象转换成二进制流,然后可以通过ObjectInputStream将二进制流还原成对象。nn在阅读ObjectOutputStream源码之前,我们先来回顾一下序列化相关的基础知识: n1、需要序列化的类必须实现java.io.Serializable接口,否则会抛出NotSerializableEx...
Android函数工具(读取InputStream到String字符串)
说明:传入一个InputStream 返回一个String字符串,一般用来读取网络数据public static String readStreamToString(InputStream inputStream) throws IOException {n //创建字节数组输出流 ,用来输出读取到的内容n ByteArrayOutputStream byteArrayOutputStr
学习笔记之java.io包中的字节流(上)—— 基本的InputStream和OutputStream
先看下类的声明:rnrnrnrnrnrnrnrn1rnrn2rnrnrnrnrnpublicrnrnabstract rnclass rnInputStream implementsrnrnCloseablernrnpublicrnrnabstract rnclass rnOutputStream implementsrnrnCloseable, Flushablernrnrnrnrnrnrnrn
关于inputStream 对象重复使用的解决方法
/**n * 读取输入流数据n * //此方法是用于缓存H5网络请求数据,解决inputStream对象不能重复复用的问题n */n public static byte[] streamToData(InputStream uristream) {n ByteArrayOutputStream outStream = null;n try
关于InputStream和OutputStream详细讲解
关于InputStream和OutputStream关于InputStream和OutputStream关于InputStream和OutputStream关于InputStream和OutputStream
序列化底层原理ObjectOutputStream.writeObject()源码解读:
//java.io.ObjectOutputStream#writeObjectnn public final void writeObject(Object obj) throws IOException {n if (enableOverride) {//标志位n writeObjectOverride(obj);//这是一个空方法,用于子类实现重写n...
ObjectOutputStream对象输入输出流和可序列化的简单理解
ObjectOutPutStream 和ObjectInputStream 的简单理解。n    简单来说就是把 一个类的对象信息 进行包装用数据IO流来传输,这条传输的管道nnimport java.io.BufferedInputStream;nimport java.io.BufferedReader;nimport java.io.File;nimport java.io.Fi
【Java基础三】InputStream获取文件并保存
最近在项目的开发过程中,有这样的一个需求:通过上游传送一个路径,通过文件获取的方式将其存取到自己想存取的地方,传送文件的类型不定,有可能是PDF,有可能是txt等。nn构建代码思路:通过inputStream获取,再将其转换存入本地。n遇到问题:类型不同该如何存储?n---解决办法:通过截图路径字符串的方式将获取的文件名称截图直接存储。这样就会避免存储类型的单一化。
java中使用IO将文件切割后保存(FileInputStream、FileOutputStream)
直接代码:rnpublic class Demo {n public static void main(String[] args) throws IOException {n n split(new File("c:\\a.mp3"), 10, new File("c:\\"));n System.out.println("切割完毕");nn LinkedHashSet hs = new
将输入流(InputStream)对象保存到数据库(mysql)
我们一般都使用数据库来保存一些文本信息,有没有想过用将java的输入流(InputStream)对象保存到mysql 中呢? n今天我们就来看一看mysql怎么保存输入流对象。nnn 1、创建sqlSessionFactory时添加typeHandlersn n 2、继承BaseTypeHandler类实现具体的类型转换n n 3、实体类字段类型定义为InputStream类型n n ...
java http 发请求,结果转jsonobject解析
import java.io.BufferedReader;nimport java.io.IOException;nimport java.io.InputStreamReader;nimport java.net.URL;nimport java.net.URLConnection;nimport java.util.List;nimport java.util.Map;nnimport or
Java 日看一类(36)之IO包中的ObjectInputVaildation接口和ObjectOutput接口
ObjectInputVaildation类无继承类和引入包该类的类头注释如下:/**n * Callback interface to allow validation of objects within a graph.n * Allows an object to be called when a complete graph of objects hasn * been deseriali...
关于重复使用InputStream对象的
关于重复使用InputStream对象的解决方法项目中使用Okhttp加载网络图片时,通过response.body().byteStream()获得InputStream流对象, n第一次需要用到该流去获得图片尺寸,而真正取图片显示时又使用了该流,当你去使用BitmapFactory.decodeStream(is, null, ops)获取bitmap时,bitmap总是null。第一次读取In
Android 善用Okio简化处理I/O操作
Okio库是一个由square公司开发的,它补充了java.io和java.nio的不足,以便能够更加方便,快速的访问、存储和处理你的数据。而OkHttp的底层也使用该库作为支持。而在开发中,使用该库可以大大给你带来方便。目前,Okio的最新版本是1.6.0,gradle的引用如下ncompile 'com.squareup.okio:okio:1.6.0'
利用InputStream和OutputStream流完成文件的断点续传,(原理)
package test;nnimport java.io.File;nimport java.io.FileInputStream;nimport java.io.FileNotFoundException;nimport java.io.FileOutputStream;nimport java.io.FileWriter;nimport java.io.IOException;nimport
关于宏定义的几个问题
1、#ifndef   UNUSED_PARAM #define   UNUSED_PARAM(v)   (void)(v) #endif 假如一个有返回值的函数 如调用时是没有使用它的返回值,编译器会给出一个警告 如果用void强制转换一下,则明确告诉编译器不使用返回值 也就是为了消除警告2、#define UNUSED(x) ((x) = (x))这个表示,如果有一个函数调用时,传参没有进行赋...
Android 发送Post请求上传图片(以InputStream为数据交互)
Android 发送Post请求上传图片(以InputStream为数据交互)最近在做项目,涉及到修改头像的功能,理论上是很简单的需求,但是由于底层的数据交互以InputStream流的形式而踩了一些坑,记录下来,帮助后来人少踩坑。先说下背景:项目需求为从相册选取图片,然后以InputStream的方式作为Http的body传递给服务端,服务端直接解析Body的内容获取图片。网络交互采用HttpCl
关于inputStream.available()方法获取下载文件的总大小
 rn rn 如果用inputStream对象的available()方法获取流中可读取的数据大小,通常我们调用这个函数是在下载文件或者对文件进行其他处理时获取文件的总大小。rn rn rn以前在我们初学File和inputStream和outputStream时,有需要将文件从一个文件夹复制到另一个文件夹中,这时候我们用的就是inputStream.available()来获取文件的总大小,而且...
Android中XML解析,保存的三种方法
简介在Android开发中,关于XML解析有三种方式,分别是:nSAX 基于事件的解析器,解析速度快,占用内存少。非常适合在Android移动设备中使用。nDOM 在内存中以树形结构存放,因此检索和更新效率会更高。但是对于特别大的文档,解析和加载整个文档将会很耗资源nPULL 基于事件的解析器,不同于SAX是,PULL是主动请求下一个事件,所以在可控上PULL要比SAX实用。Android系统内部在
InputStream和OutputStream进行读、写、删除文件
JAVA中我们经常会从一个文件中读取数据或者写数据或者删除删除数据rnrnrn下面来看一下串流的继承架构:rnrnrn图片参考:http://blog.csdn.net/wh4656438/article/details/51727795rnrnrn今天这片文章主要举几个字节流的文件读写rnrnrn1,读取文件中的字符,每次读取一个字符rnrnrnpackage a001;nnimport jav
calllog概述
android中calllog简介,以及做contacts时遇到的几个问题。
android 保存mp4视频的办法
final InputStream input = (InputStream) reponse;n String filename = "/ad" + ".mp4";n String root = Environment.getExternalStorageDirectory().toString();nn
简历中要注意的几个问题.rar简历中要注意的几个问题.rar
简历中要注意的几个问题.rar简历中要注意的几个问题.rar简历中要注意的几个问题.rar简历中要注意的几个问题.rar简历中要注意的几个问题.rar简历中要注意的几个问题.rar简历中要注意的几个问题.rar简历中要注意的几个问题.rar简历中要注意的几个问题.rar简历中要注意的几个问题.rar简历中要注意的几个问题.rar简历中要注意的几个问题.rar简历中要注意的几个问题.rar
java 将inputStream写入文件中
public static void inputStreamToFile(InputStream is, String fileName) throws IOException {rn        OutputStream outputStream=null;rn        File file = new File(fileName);rn        outputStream = new
Java中FileInputStream类的常用方法
FileInputStream类从文件系统中的某个文件中获得输入字节。(继承自InputStream类)构造方法public FileInputStream(File file) 通过打开一个到实际文件的连接来创建一个 FileInputStream,该文件通过文件系统中的 File 对象 file 指定。public FileInputStream(String name) 通过打开一个到实际文...
kotlin写安卓的sharepreference存储功能
kotlin 实现shareperference 的存储功能,
android将对象写入文件和从文件中读取对象数据
FileOutputStream fileOutputStream = null;nObjectOutputStream objectOutputStream = null;ntry{n JSONObject jsonObject=new JSONObject(msg);n String status=jsonObject.getString("status");n if(status
android FileInputStream分段读取文件 断点续传
final Thread thread = new Thread() {n @Overriden public void run() {n try {n File file = new File(path);n
读取inputStream中的数据
以上
Android之——AIDL小结
AIDL (Android Interface Definition Language )AIDL 适用于 进程间通信,并且与Service端多个线程并发的情况,如果只是单个线程 可以使用 Messenger ,如果不需要IPC 可以使用BinderAIDL语法:基础数据类型都可以适用,List Map等有限适用。static field 不适用。AIDL基本用法n1、实现.aidl文件n接口
获得InputStream,读取配置文件的方式
一、 获得InputStream的方式rn1、使用FileInputStreamrnrnInputStream in = new BufferedInputStream(new FileInputStream("E:\\svn_new\\3icommontutil\\src\\main\\resources\\datasource\\datasource.properties"));//绝对路径r
关于InputStream 中available()方法的使用问题
在用流进行数据或文件读写的时候经常看到某些人会使用下面的固定字节长度的数组,存储InputStream 读取的字节n常见代码如下:nn in = new ByteArrayInputStream(postData.getBytes(charSet));n byte[] buf = new byte[1024];n int len;n while
1如何判断socket是否连接;2如何结束socket.inputstream.read阻塞中的线程
1、如何判断当前的连接是否有效。在客户端和服务器已经建立连接的情况下,如果连接断了(如服务器关闭,网线断了之类),客户端如何知道连接已断?网上找到一个方法,使用sendUrgentData(0xFF); 如果服务器关闭就会抛出异常,在try里截获异常就可以判断另外在客户端的接收语句in.readLine();中,如果服务器关闭也会抛出异常,截获异常就可以判断但上面这两个方法都只能判断出服务器关闭时...
IO流之ZipInputStream和ZipOutputStream的认识及常用使用
ZipInputStream和ZipOutputStream定义nnn压缩流 n在日常中经常会使用到zip或rar这样的压缩文件,更加便利了我们日常文件的传输和使用。当然在java中 n也提供了相应的输入输出流来压缩和解压gzip、zip和rar这样的文件。nZipInputStream n“压缩文件输入流”,用于读取磁盘上的压缩文件nZipOutputStream n“压缩文件输出流”,用于将程...
I2C总线应用中的几个问题I2C总线应用中的几个问题I2C总线应用中的几个问题
I2C总线应用中的几个问题I2C总线应用中的几个问题I2C总线应用中的几个问题
InputStream如何判断数据已经读取结束
InputStream如何判断数据已经读取结束
InputStream——输入流读取数据缺失或多余现象
写Java、android的程序员应该对InputStream再熟悉不过了。不管是文件操作还是网络传输,只要牵扯到传输数据的时候都难免会用到它。输入流能够快速的读取我们文件n或者网络的数据,但有时候也会碰到问题——数据缺失或多余。这里面其实不是输入流本身的问题,字节是完完全全读取到了,是在将编码转换成字符的时候出现了问题。是字n节数组多余空间上的默认值(0)参与了转换导致混乱而产生的。
文章热词 机器学习教程 Objective-C培训 交互设计视频教程 颜色模型 设计制作学习
相关热词 mysql关联查询两次本表 native底部 react extjs glyph 图标 关于大数据培训 数据库中关于课程的表