Java基本笔记之IO操作
2014-07-31 15:53
453 查看
输入流输出流
概念:流是程序与外界进行交换的通道。程序通过输入流从数据源读取数据,通过输出流向目的源写入数据。
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的类也是不可序列化的。
概念:流是程序与外界进行交换的通道。程序通过输入流从数据源读取数据,通过输出流向目的源写入数据。
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的类也是不可序列化的。
相关文章推荐
- java笔记-IO流-IO基本操作
- 2011-08-30 交作业(java io 文件基本操作)
- Java中IO操作的基本规律
- Java学习笔记——IO操作之对象序列化及反序列化
- [Java 12 IO] File 类 的几个基本操作
- java学习笔记(四)——io操作
- Java IO学习笔记(五):内存操作流
- Java的IO操作(二) - 带缓冲区的流对象、写入基本数据类型、实现命令行中的copy命令
- Java 基本的IO操作
- Java学习笔记——IO操作之以图片地址下载图片
- 『黑马程序员』---java--IO--分段读写-操作基本类型-内存为源
- Java IO 一些基本操作
- Java的IO操作(二) - 带缓冲区的流对象、写入基本数据类型、实现命令行中的copy命令
- 〖JAVA IO〗_IO操作实例笔记
- 学习笔记之javaweb基础:jsp基本语法,内置对象,对JavaBean的操作语法
- JAVA学习笔记(2)基本数据类型和基本操作
- 〖JAVA IO〗_实例操作:投票程序笔记
- java学习笔记(十三)----IO操作
- Java学习笔记----------------常见IO操作
- LDAP学习笔记<四>jldap实现Java对LDAP的基本操作