Java高级特性---输入/输出流

1、目录和文件操作

目录和文件是磁盘树形结构中最基本的组成单元,Java用File类来统一表示他们,通过它们来完成目录和文件的创建、删除、查询等操作。File类经常使用的方法:

  1. isDirectory()和isFile()方法:用于检查该File对象所代表的是目录还是文件;
  2. createNewFile()方法:创建新文件,采用File对象所存储的路径和文件名进行创建;
  3. list()方法:用于目录,得到目录下所有的文件名,类型为字符串数组;
  4. getName()方法:得到文件名,不包含路径;
  5. delete()方法:删除文件。

2、如何使用随机存取文件RandomAccessFile类

InputStream和OutputStream都只能单方面的读和写文件的内容,RandomAccessFile类,是专门用来随机存取文件内容的。
RandomAccessFile操作文件内容的时候,就像操作一块内存区域一样,把字节用下标数字来进行定位,通过RandomAccessFile的API方法,把指针的指向进行移动,达到随机存取数据的目的。

  1. 用length()方法获取文件的内容长度;
  2. 用seek()方法随机到达任何需要存取数据的地方;
  3. 调用read()方法获取当前位置的数据,用write()方法写入数据;
  4. 完成需要以后,调用close()关闭文件的打开。

3、字节流的处理方式

字节流是I/O中最原始的方式,因为计算机处理数据总是以一个字节byte为基本单位的字节流就是每次读取的单位为byte。字节流,就所有流的基础,也是其他高级流的前提。字节流的最大特点,就是每次的输出和输入都是一个字节。
read()和write()方法,是字节流的主要使用方法,它们的处理目标通常是一个byte数组,也就是把这些byte写入或者读出。

4、字符流的处理方式

字符流是由字节流包装而来,它的输入输出流包括StringReader和StringWriter、BufferReader和BufferWriter。前者主要还是使用read()和write()方法,后者除了这两个方法,还有readLine()方法。
字符流对象创建的时候,一般需要提供一个输入或输出流的。例如创建BufferReader和BufferWriter对象的时候,需要一个InputStreamReader或InputStreamWriter对象。

5、什么是序列化

又称“串化”,序列化本质上就是把对象内存中的数据按照一定的规则,变成一系列的字节数据,然后再把这些字节数据写入到流中。而反序列化的过程相反,先读取字节数据,然后再重新组装成Java对象。
所有需要进行序列化的类,都必须实现Serializable接口,java.io.Serializable接口是可以进行序列化的类的标志性接口,该接口本身没有任何需要实现的抽象方法,仅仅是来告诉JVM该类的对象可以进行序列化,并且它的序列化ID由静态的serialVersionUID变量提供。
serialVersionUID变量其实是一个静态的long型的变量,它的作用在序列化和反序列化的过程中,起到了一个辨别一个类的作用。在反序列化的时候,如果两个类的类名完全相同,就通过serialVersionUID来判断该类是否符合要求,如果不行,抛出异常。

6、如何进行序列化和反序列化一个Java对象

对于对象的输入和输出,Java的I/O体系中主要提供了ObjectOutputStream和ObjectInputStream两个类供使用,使用思路:

  1. 让需要序列化的类实现java.io.Serializable;
  2. 提供静态的long型的常量serialVersionUID;
  3. 如果是序列化对象,则用一个输出流创建一个ObjectOutptStream对象,然后调用writeObject();
  4. 如果是反序列化对象,则用一个输入流创建一个ObjectInuputStream,然后调用readObject()方法,得到一个Object类型的对象;
  5. 关闭流。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值