A
基本的IO操作
什么是输入:
--输入是一个从外界进入到程序的方向,通常我们需要读取外界数据时,使用输入,输入是用来读取数据的。
什么是输出:
-- 输出是一个从程序发送到外界的方向,通常我们需要写出数据到外界时,使用输出,输出是用来写出数据的
InputStream:是所有字节输入流的父类,它定义了基础的读取方法,常用的方法如下:
--int read():读取一个字节,以int形式返回,该int值“低8位”有效,若返回值为-1则表示EOF。
---重载方法:int read(byte[] d):尝试最多读取给定数组的length个自己并存入该数组,返回值为世纪读取的字节量
OutputStream是所有字节输出流的父类,其定义了一些基础写出方法,常用的如下:
--void write(int d):写出一个字节,写的是给定的int的低8位。
--void write(byte[] d):将给定的字节数组中的所有字节全部写出。
文件流
FileOutputStream:是文件的字节输出流,我们使用该流可以将字节为单位写入到文件。
构造方法:
--FileOutputStream(File file):创建一个指向File对象表示的文件A数据的文件输出流。
--FileOutputStream(String filename):创建一个有指定名称的文件中写出数据的文件输出流。
注:若指定的文件已经包含内容,那么当使用FileOutputStream对其写入数据时,会将该文件中原有数据全部清除。
--FileOutputStream(File file,boolean append):
--FileOutputream(String filename,boolean append)
两种都属于[FileOutputStream-追加模式]
注:以上两个构造方法中,第二个参数若为true,那么通过FileOutputStream写出的数据都是在文件末尾追加的。
FileInputStream:是文件的字节输入流,我们可以使用该流以字节为单位从文件中读取数据。
构造方法:
--FileInputStream(File file);
--FileInputStream(String filename),
常用方法:
read()/read(byte[] d)/read(byte[],int offset,int len).....
缓冲流
BufferedInputStream:输入缓冲流
BufferedOutputStream:输出缓冲流
--BufferedOutputStream缓冲输入流内部维护着一个缓冲区,每当我们向该写数据时,都会先将数据存入到缓冲区,当缓冲区满的时候,缓冲流会将数据一次性全部写出
--BufferedInputStream是缓冲输入流,内部也维护着一个缓冲区(字节数组),使用该流在读取一个字节时,该流会尽可能多的一次性读取若干字节并存入缓冲区,然后逐一的将字节返回,直到缓冲区的数据被全部读取完毕,这样就减少了读取的次数,从而提高了读取的效率。
构造方法:
--BufferedOutputStream(OutputStream out);
--BufferedInputStream(InputStream out);
常用方法:read()/write()等
请出缓存区中的数据,可以用flush()方法。
close()方法中包含flush()方法
节点流和处理流
--按照流是否与特定的地方(如磁盘、内存、设备等)相连,分为节点流和处理流两类
节点流(低级流):可以从或者向一个特定的地方(节点)读写数据。
(高级流):是对一个已经存在的流的链接和封装,通过所封装的流的功能调用实现数据读写。
--处理流的构造方法总要带一个其他流对象为参数。
--一个流经过其他流的多次包装,称为流的链接。
对象流
对象是存在于内存中,有时候需要将对象保护在硬盘上等,这时我们就需要对象流;将对象转换为一个字节序列,而这个过程就称为对象的序列化;
相反,一个字节序列需要转化为对应的对象,这个过程就称为对象的反序列化。
ObjectOutputStream:是用来对对象序列化的输出流;
--void writeObject(Object obj):将给定的对象转换为一个字节序列后写出
ObjectInputStream;用来对对象进行反序列化的输入流。
--Object readObject();该方法可以从流中读取字节并转换为对应的对象。
Serializable接口:实现该接口不需要重写任何方法,其只是作为可序列化的一个标志。
给对象瘦身的关键字:transient:
--对象在序列化后得到的字节序列往往是比较大的,有时我们在对对象进行序列化时我们可以忽略一些不必要的属性,从而对序列化后得到的字节序列进行瘦身。