13.序列化和IO流(存储恢复)

1.序列化

对象序列化

用来存储对象的状态。

将被序列化的对象写到文件中,然后可以让你的程序去文件中读取序列化的对象并把他们展开回到活生生的状态。

当对象被序列化时,该对象引用的实例变量也被序列化,且所有被引用的对象也被序列化。

如果要让类能够被序列化,实现Serializable,此接口没有任何方法需要实现,唯一目的就是是声明有实现它的类是可以被序列化。

objectOutputStream.writeObject(myBox)

任何放在此处的对象都必须实现序列化,否则执行期一定会出问题。

步骤:

1.创建出FileOutputStream

FileOutputStream fileStream = new FileOutputStream("MyGame.ser");

2.创建ObjectOutputStream

ObjectOutputStream os = new ObjectOutputStream(fileStream);

3.写入对象

os.writeObject(characterOne);

4.关闭ObjectOutputStream

os.close();\=

解序列化(Deserialization)

把对象恢复到存储时的状态。从第一个不可序列化的父类开始,全部都会重新初始状态。

步骤:

1.创建FileInputStream

FileInputStream fileStream = new FileInputStream("MyGame.ser");

2.创建ObjectInputStream

ObjectInputStream os = new ObjectInputStream(fileStream);

3.读取对象

Object one = os.readObject();

4.转换对象类型,返回的是Object

GameCharacter elf = (GameCharacter) one;

5.关闭ObjectInputStream

Os.close();

如果某实例变量不能/不应该被序列化,应标记成transient

读取对象的顺序必须与写入的顺序相同。

2.IO流

从数据源当中读取数据,以及将数据写入到数据的目的地当中

数据的流向以java程序为参照物。

1.IO的分类方法

分法一: 1.输入流;2.输出流;

分法二: 1.字节流;2.字符流;

分法三: 1.节点流(真正处理数据);2.处理流(用来在节点流基础上对数据再加工);

2.读取文件和写入文件方法

   2.1字节流

    1)核心类

InputStream和OutputStream是抽象类,父类。

这里有个trim方法:Stream的trim方法可以把首尾的空格和空字符去掉

     2)核心方法

InputStream:

int read(byte[] b,int off,int len)  字节数组

读取数据

off:偏移量从b的第几位开始。

len读取一次最多读多少数据。

read方法的返回值为读的字节数。

OutputStream:

int write(byte[] b,int off,int len)

数据写到文件去

byte[]:往文件里写的数据

off:从第几位写

len:总共写多少字节数据
     3)步骤

1.导入类

import java.io.*;

2.加上try  catch,声明FileInputStream引用,用来指向其一个对象

FileInputStream fis = null;

3.生成代表输入流/输出流的对象

fis = new FileInputStream("D:/workspace/java_src/from.txt");

4.生成一个字节数据

byte[] buffer = new byte[100];

5.调用输入流对象的read方法,读取数据

int temp = fis.read(buffer,0,buffer.length); 读完返回-1;

读进来放进buffer,从第0个放,buffer.length这次读取长度数据。

6.最后关闭IO流:对象.close();

   2.2字符流

读写文件时,以字符为基础

字节输入流:Reader<----FileReader两个子类。

字节输出流:Writer<---FileWriter

好比字节流中的FileInputStream和FileOutputStream

核心方法:

int read(char [] c,int off,int len)  字符数组

void write(char [],int off,int len)

   2.3处理流和节点流

        1)BufferReader用法

有一个readline方法,并不是真的从文件读,而是从FileReader对象读取数据,传过去的,再用readline进一步处理。

生成对象:

fileReader = new FileReader("D:/workspace/java_src/User.txt");

bufferedReader = new BufferedReader(fileReader);

读取文件中一行:

String line = null;

line = bufferedReader.readLine();

   2)装饰者模式

节点流是被装饰者,处理流是装饰者。装饰者是给被装饰者添加新的功能。

被装饰着的对象作为参数传递到装饰者里。

来自为知笔记(Wiz)

时间: 2024-11-10 06:44:47

13.序列化和IO流(存储恢复)的相关文章

IO流,对象序列化

对象序列化 序列化机制允许将实现序列化的Java对象转换成字节序列,这些字节序列可以保存在磁盘上,或者用于网络传输,以备以后重新恢复成原来的对象.序列化机制使得对象可以脱离程序的运行而独立存在. 对象的序列化(Serialize)指将一个Java对象写入IO流中,与此对应的是,对象的反序列化(Deserialize)则是指从IO流中恢复该Java对象.如要让某个对象支持序列化机制,则必须要让它的类是可序列化的(Serializable).为了让某个类是可序列化的,该类需要继承如下两个接口之一:

Java之IO流详解

IO流 Input/Output 完成输入/输出 应用程序运行时——数据在内存中  ←→ 把数据写入硬盘(磁带)  内存中的数据不可持久保存的  输入:从外部存储器(硬盘.磁带.U盘)把数据读入内存. 输出:从内存中把数据写入外部存储区(硬盘.磁带.U盘)中,这样就可以保证:即使程序退出了,数据依然不会丢失. File — 代表磁盘上的文件或目录. ●  listRoots() :列出磁盘上所有的根目录 ● exists:判断是否存在 ● mkdir:创建目录 ● listFiles():列出当

Java API —— IO流(数据操作流 &amp; 内存操作流 &amp; 打印流 &amp; 标准输入输出流 &amp; 随机访问流 &amp; 合并流 &amp; 序列化流 &amp; Properties &amp; NIO)

1.操作基本数据类型的流 1) 操作基本数据类型 · DataInputStream:数据输入流允许应用程序以与机器无关方式从底层输入流中读取基本 Java 数据类型.应用程序可以使用数据输出流写入稍后由数据输入流读取的数据. · DataOutputStream:数据输出流允许应用程序以适当方式将基本 Java 数据类型写入输出流中.然后,应用程序可以使用数据输入流将数据读入. package datastreamdemos; import java.io.*; /** * Created b

内存储与外存储(IO流的应用)

存储分为内存储,外存储(Sd卡存储),其中还涉及IO流的应用. 我们先来看内存储,在布局中EditView中输入的内容,通过点击按钮,分别进行保存,读取,删除的操作,读取时显示在下面的TextView中. 布局如下: <?xml version="1.0" encoding="utf-8"?><RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android&

【Android】数据存储-java IO流文件存储

1.数据持久化:将在内存中的瞬时数据保存在存储设备中.瞬时数据:设备关机数据丢失.持久化技术提供一种机制可以让数据在瞬时状态和持久状态之间转换. 2.Android中简单的三种存储方式:文件存储.SharedPreference 存储以及数据库存储. 1.文件存储 :不对数据作任何处理,将数据原封不动地存储到文件中,适合存储一些简单的文本数据和二进制数据. a.将数据存储到文件中 Context类提供了一个openFileOutput()方法,可以用于将数据存储到文件中.这个方法接收两个参数,第

IO流--序列化流与反序列化流

IO流--序列化流与反序列化流: 序列化流:把对象当做流一样写入到文本文件中 ObjectOutputSream(); 反序列化流:把文本文件中的流对象还原成对象ObjectInputSream(): 具体的使用: 1   创建java对象 实现序列化接口(Serializable): 序列化代码实现: 1 private void writer() throws IOException { 2 ObjectOutputStream oos = new ObjectOutputStream(ne

android IO流操作文件(存储和读取)

存储文件: public class FileOperate extends Activity { private static final String FILENAME = "mydata.txt" ;// 设置文件名称 private static final String DIR = "ljpdata" ; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(s

java之IO流

知识点: java.io包中:类File:实现的接口:Serializable,Comparable<File> 含义:文件和目录路径名的抽象表示形式.  [抽象路径名 中第一个名称是目录名,抽象路径名中第一个名称之后每个名称都是表示一个目录,最后一个名称即可以表示目录也可以表示文件]  用户界面和操作系统使用与系统相关的 路径名字符串 来命名文件和目录.此类呈现分层路径名的一个抽象的.与系统无关的视图. 抽象路径名 有两部分组成: 1)一个可选的与系统相关的前缀字符串,比如盘符:"

Java之IO流---字节流

1.1 IO流的引入 IO流在很多语言已有体现,诸如C语言的stdio.h,C++中的iostream.Java中的IO流大抵是用于在控制台.磁盘.内存上进行数据的读写操作,完成数据的传递. 我们可以对它进行如下分类: 按处理的数据类型可分为字节流与字符流 按流的流向可分为输入流(in)与输出流(out) 按流的功能可分为节点流(Node)和过滤流(Filter) 本篇侧重于梳理字节流相关的知识,毕竟作为字符流的前辈,它还是非常重要的.下篇继续梳理字符流. 1.2 IO流的继承体系图 大概描述了