Java基本笔记之IO操作

来源:互联网 发布:淘宝店铺页头怎么做 编辑:程序博客网 时间:2024/05/22 08:19

输入流输出流

概念:流是程序与外界进行交换的通道。程序通过输入流从数据源读取数据,通过输出流向目的源写入数据。


1.    File类

文件和目录都通过File类来操作,File能新建,删除,重命名文件或目录。如果要访问文件本身,则使用输入,输出流。


2.    Java的IO流

Java的IO流能够方便实现数据的输入/输出操作,在Java中把不同的输入/输出源(键盘,文件,网络连接等)抽象表述为“流”(stream),通过流的方式允许程序使用相同的方式来访问不同的输入/输出源。Stream是从起源到接收的有序数据。


3.    流的分类

1>    输入流和输出流

输入流:只能从中读取数据,而不能向其写入数据。

输出流:只能向其写入数据,而不能从中读取数据。

2>    字节流和字符流

字节流以字节为单位来处理输入/输出操作,数据单元是8位的字节;

字符流以字符为单位来处理输入/输出操作,数据单元是16位的字符。

字节流主要由InputStream和OutputStream作为基类,字符流主要由Reader和Writer作为基类。

3>    节点流和处理流

节点流:从/向特定的IO设备(如磁盘,网络)读/写数据的流;

处理流:用于对一个已存在的流进行连接或封装,通过封装后的流来实现数据读/写功能。

4>    缓冲流

缓冲流也是对节点流做一层包装,以提高IO设备的读写效率

5>    总结

使用处理流的典型思路是:使用处理流来包装节点流,程序通过处理流来执行输入/输出功能,让节点流与底层的IO设备、文件交互。

为了提高读写效率,可以在处理流和节点流之间加一层缓冲流,具体为: 处理流(缓冲流(节点流())) 。

节点流与处理流一个最大分别之处是:所有的节点流都是直接以物理IO节点作为构造器参数,而处理流的构造器参数不是物理节点,而是一个已经存在的流。

【注*】在使用处理流包装了底层的节点流之后,关闭输入/输出流资源时,只需关闭最上层的处理流即可,系统会自动关闭被该处理流包装的节点流。


4. RandomAccessFile是Java输入/输出流体系中功能最丰富的文件内容访问类,它可以读取文件内容,也可以向文件输出数据,而且支持随机访问的方式,可以直接跳转到文件的任何地方来读写数据。


5. 对象序列化

 1>  对象序列化目的和意义

将实现序列化的Java对象转换成字节序列,这些字节序列可以保存在磁盘上,或通过网络传输,以备以后重新恢复成原来的对象。

对象的序列化(Serialize)指将一个Java对象写入IO流,对象的反序列化(Deserialize)则指从IO流中恢复该Java对象。

2>  需要满足的条件

如果需要让某个对象支持序列化机制,则必须让它的类是可序列化的(serializable)。为了让某个类是可序列化的,该类必须实现如下两个接口之一:

Serializable

Externalizable

3>  使用对象流实现序列化

一旦某个类实现了Serializable接口,该类的对象就是可序列化的,程序可以通过下面两个步骤来序列化该对象。

第一步:创建一个ObjectOutputStream,这个输出流是一个处理流,所以必须建立在其他节点流的基础之上

ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream("object.txt"));

第二步:调用ObjectOutputStream对象的writeObject()方法输出可序列化对象

oos.writeObject(objectName);

4>  从二进制流中恢复Java对象,需要用到反序列化。

第一步:创建一个ObjectInputStream输入流,这个输入流是一个处理流,必须建立在节点流的基础之上。

ObjectInputStream ois = new ObjectInputStream(new FileInputStream("object.txt"));

第二步:调用ObjectInputStream对象的readObject()方法读取流中的对象,该方法返回一个Object类型的Java对象,如果程序知道该Java对象的类型,则可以将该对象强制类型转化成其真实的类型。

Object object = (Object)ois.readObject();

【注*】如果某个类的Field类型不是基本类型或String类型,而是另一种引用类型,那么这个引用类必须是可序列化的,否则拥有该类型的Field的类也是不可序列化的。

0 0
原创粉丝点击