IO流以及对象序列化

本文详细介绍了Java中的File类及其在文件和目录操作中的方法,如创建、删除、属性获取等。同时,阐述了字节流和字符流的区别,以及输入流、输出流、节点流和处理流的概念。还提到了缓冲流在提高读写速度中的作用,并解释了对象序列化和反序列化的概念。此外,讨论了为什么字符流不适合读取非文本文件的原因。
摘要由CSDN通过智能技术生成

File类的作用

一个File类对象可以代表一个文件或目录,

File可以实现获取文件和目录属性等功能,

可以实现对文件和目录的创建,删除等功能.

File类操作目录与文件的常用方法

文件方法:

createNewFile();创建新文件

delete();直接从磁盘删除

exists();查询磁盘中是否存在指定文件

getAbsolutePath();获取绝对路径

getPath();获取相对路径

getName();获取文件名,相当于调用了一个toString方法

isFile();判断是否是文件

length();查看文件中的字节数.

目录方法;

exists();查询目录是否存在.

isDirectory();查询文件夹是否存在

isFile();查询文件是否存在

mkdir();创建单层目录

delete();删除目录

getParentFile();获取目录的父级目录

list();返回一个字符串数组,命名由此抽象路径名表示的目录中的文件和目录.

listFiles;返回一个字符串,命名由此抽象路径名表示的目录中的文件和目录.可以获取相对路径和绝对路径,可以对文件进行操作.

流可以分为哪些种类

1.从数据流编码格式可划分为:

字节流和字符流

字节流中常用类:

字节输入流FileInputStream

字节输出流FileOutputStream

字符流中的常用类:

字符输入流FileReader

字符输出流FileWriter

2.流按照数据传输方向分为:

输入流:往程序中读叫输入流.

输出流:从程序中往外写叫输出流.

InputStream和OutputStream的子类都是字节流,可以读写二进制文件,主要处理音频,图片,歌曲,字节流,处理单元为一个字节.

Reader和Writer的子类都是字符流

主要处理字符或字符串,字符流处理单元为1个字符.

字节流将读取到的字节数据,去指定的编码表中获取对应文字.

InputStream的基本方法:

读取一个字节并以整数的形式返回(0~255),如果返回-1已到输入流的末尾.

读取一列的字节并存储到一个数组中buffer.返回实际读取的字节数,如果读取前已到输入流的末尾返回-1

关闭流释放内存资源

OutputStream的基本方法:

向输出流中写入一个字节数据,该字节数据为参数b的低8位,

讲一个字节类型的数组中的从指定位置(off)开始的len个字节写入到输出流.

关闭流释放内存资源

输入输出字符流:

Reader的基本方法,

读取一个字符并以整数的形式返回,

如果返回-1已到输入流的末尾,

读取一系列字符并存储到一个数组buffer,

返回实际读取的字符数,如果读取前已到输入流的末尾返回-1

关闭

Writer的基本方法:

向输出流中写入一个字符数据,该字节数据为参数b的16位

一个字符类型的数组中的数据写入输出流.

将一个字符类型的数组中的从指定位置(offset)开始的length个字符写入到输出流.

关闭

3.根据封装类型不同流分为

节点流:

如果分装的是某种特定的数据源,如文件,字符串,字符串数组等,则称为节点流.

处理流:

如果流封装的是其他流对象,称为处理流.

处理流提供了缓冲功能,提高读写效率,同时增加了一些新的方法.

4.print流:

print打印流:只做输出没有输入

打印流分为字节打印流和字符打印流

printWriter:字符打印流

print方法可以打印各种类型数据.

5.对象输入输出流:

主要作用:用于写入对象信息与读取对象信息.对象信息一旦写到文件上那么对象的信息就可以做到持久化.

对象的输出流:ObjectOutputStream

对象的输入流:ObjectInputStream

要将序列化后的对象保存下来,需要通过对象输出流(ObjectOutputSteam)将对象状态保存,之后再通过对象输入流(ObjectInputStream)将对象状态恢复.

在ObjectInputStream中用readObject()方法可以直接读取一个对象,

ObjectOutputStream中用writeObject()方法可以直接将对象保存到输出流中.

字符流可以读取图片,音频等文件吗?

不可以,字符流在读取完了字节数据后并没有直接往目的地写,而是先查编码表,查到对应的数据就将该数据写入目的地.如果查不到,则码表会将一些未知区域中的数据去map这些字节数据,然后写到目的地,这样的话就造成了源数据和目的数据的不一致.

字符流读取一些纯文本文件.

而字节流可以操作所有类型的文件,因为所有的文件在计算机中都是以字节形式存储.

如何提高流的读写速度

使用缓冲流:

缓冲区概念:一片内存存储空间,在读写数据的程序之前,数据存储在这里,这样不用每次去物理硬盘上的数据源取了.

缓冲输入流(BufferedlnputStream):在缓冲区的输入流(InputStream),输入流都是在硬盘数据源取数据的,要从缓冲区取数据,那缓冲区里面要有数据,所以要建立缓冲输入流(BufferedlnputStream)

什么是对象序列化,对象反序列化,什么时候用?

对象的寿命通常随着生成该对象的程序终止而终止.

有时候,可能需要将对象的状态保存下来,在需要的时在将对象恢复.

对象的输出流将指定的对象写入到文件的过程,就是将对象序列化的过程,对象的输入流将指定序列化好的文件读出来的过程,就是对象反序列化的过程,既然对象的输出流将对象写入到文件中称之为对象的序列化,所以必须要实现Serializable接口.

Serializable接口没有任何方法.当一个类声明实现Serializable接口后,表名该类可被序列化.

在类中可以生成一个编号,

pricate static final long serialVersionUID=.......................L;随机生成唯一的.

SerialVersionUID用来表名实现序列化类的不同版本间的兼容性.某个类在与之对应的对象已经序列化出去后做了修改,该对象依然可以被正确反序列化.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值