在分布式环境下,当进行远程通信时,彼此可以发送各种类型的数据。无论是何种类型的数据,都会以二进制序列的形式在网络上传输。发送方需要把这个java对象转换为字节序列,才能在网络上传送。
在JDK中,提供两个抽象类InoutStream和OutputStream,他们是字节流的顶级父类,所有的字节输入流都继承自InoutStream,所有的字节输出都继承OutoutStream,因此在使用时一般不会调用这两个抽象类。
在IO操作结束后,应该调用close()方法关闭流。从而释放当前IO流所占的系统资源。
InputStream和OutputStream这两个类虽然提供了一系列和读写数据有关的方法,但这两个类是抽象类,不能被实例化。
序列化的概念
序列化:把java对象转换为字节序列化的过程
java序列化的几种方式:
对象输出流
通过ObjectOutputStream类对象的writeObject(Object obj)方法,将指定的obj对象写到一个目标字节输出流中
对象输入流
通过ObjectInputStream类对象的readObject()方法从一个源数据流中读取字节序列,实现反序列化为一个java对象
注意:只有实现Serializable或Externalizable接口的类的对象才能被序列化。
(1)定义一个实体类,并实现Serializable接口
public class Studebt implements Serializable{
}
(2)创建该类的对象
Student student=new Student();
(3) 创建逻辑文件
File file=new File("物理文件");
(4)创建文件输出流
FileOutputStream fos=new FileOutputStream(file);
(5)创建对象输出流,负责将对象写入字节流
ObjectOutputStream oos=new ObjectOutputStream(fos);
(6)通过对象输出流写入对象
oos.wruteObject(student);
(7)关闭流
oos.close();
fos.close();
(1)定义一个实体类,并实现Serializable接口
public class Student implements Serializable{}
(2) 创建该类对象(使用无参构造函数创造一个实体类对象)
Student student=nwq Student();
(3)创建逻辑文件
File file=new File("物理文件");//构造函数
(4)创建文件输入流
FileInputStream fis=new FileInputStream(file);
(5) 创建对象输入流,负责将对象读入字节流
ObjectInputStream ois=new ObjectInputStream(fis);
(6)通过对象输入流读出对象并处理该对象
Student student=(Student)ois.readObject();
System.outy.println(student);
(7)关闭流
ois.close();
fis.close();