android 对象输出到文件

  在我们写app时,经常要访问服务器去拉取服务器的数据,然后做本地缓存,这样只要服务器端的数据没有更新,我们的APP就没有必要去每次都发送请求,只要从缓存的本地文件中读取出来,正确的做解析即可。

  在公司最近的项目中,主要是要缓存一些目录数据,因为这些数据是不怎么变化的,不必每次都去发请求,有了这个需求后,我就开始准备缓存服务器返回来的Json数据,可后来注意到程序中接收到服务器的响应后已经将Json解析为了对象,这种情况下我就不可以将Json存到文件中去了,只能是将对象存到文件中去,于是就研究了一下Java如何将对象写入到文件中去,发现写对象到文件中与写字符串到文件基本上是一样的。

  下面是我写的一个存储对象和读取对象的demo:

 

package com.example.objectwriterdemo;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;

import android.app.Activity;
import android.os.Bundle;
import android.os.Environment;
import android.util.Log;

public class MainActivity extends Activity
{

	private Student student;
	private Student stu1;
	private File sdCardDir;
	private File sdFile;

	@Override
	protected void onCreate(Bundle savedInstanceState)
	{
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		initData();
		readyToWriter();
		readyToReader();

	}

	private void initData()
	{
		student = new Student();
		student.name = "rzq";
		student.sex = "male";
	}

	private void readyToWriter()
	{
		if (Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED))
		{
			sdCardDir = Environment.getExternalStorageDirectory();
			sdFile = new File(sdCardDir, "student.out");
			try
			{
				FileOutputStream fos = new FileOutputStream(sdFile);
				ObjectOutputStream oos = new ObjectOutputStream(fos);
				oos.writeObject(student);
				fos.close();
			}
			catch (Exception e)
			{
				e.printStackTrace();
			}
		}
	}

	private void readyToReader()
	{
		if (Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED))
		{
			try
			{
				FileInputStream fis = new FileInputStream(sdFile);
				ObjectInputStream ois = new ObjectInputStream(fis);
				stu1 = (Student) ois.readObject();
				fis.close();
			}
			catch (Exception e)
			{
				e.printStackTrace();
			}
		}

		Log.e("=========", stu1.name);
	}
}

  解释一下:  FileInputStream,FileOutputStream是文件输入,输出流,是字节流,同时也是结点流,只有结点流是可以直接指向到具体的文件的,而ObjectInputStream,ObjectOutputStream是对象流,同时也是处理流,处理流是不能直接指向到最络要输入输出的文件的,它们只能指向到结点流,所以我们要先创建好结点流,然后将对象流指向到这些结点流上,就可能通过处理流去处理对象的输入与输出了。

你可能感兴趣的:(andorid,应用程序,对象流)