java的IO API(2)

RandomAccessFile类:

  • 可以操作文件的内容
  • 按照字节操作,字节流
  • read读和write写都是此类中的api方法
  • 能够通过seek方法可以随意移动和改动文件的指针

RandomAccessFile类对文件的随机访问方式有两种

  • 只读模式(“r”)
  • 读写模式(“rw”)

创建对象

  • RandomAccessFile(File file,String mode);
    创建从中读取和向其中写入的随机访问流
    文件通过File指定
    模式通过String来指定
  • RandomAccessFile(String file,String mode);
    创建从中读取和想其中写入的随机访问流
    文件通过String指定
    模式通过String来指定
  • mode的取值
    "r"只读模式 read
    "rw"读写模式 read write

写入操作

- void write(int d);
此方法会根据当前的指针所在的位置写入一个字节
- void write(byte[] d)
此方法会根据当前的指针所在的位置处写入一组字节
- void write(byte[] d,int offset,int len)
将len个字节从值得顶的byte数组写入文件,并从偏移量offset处开始 	

读取操作

- int read()
从文件中读取一个byte字节,填充到整形的额低八位中
如果返回-1,说明读取到文件的末尾 EOF end of file
- int read(byte[] b)
从指针指向的位置开始读取若干字节,存储到字节数组中,将读取到的字节按照顺序放在字节数组的相对应的位置,返回值为读取到的字节数,也可以说成读入到的长度,返回值为-1,则读取到文件的末尾
- int read(byte[] d.int offset,int len)
将最多len个数据字节从文件中读入byte数组中,并从偏移量offset开始存储

其他api

  • void getFilePointer()
    返回此文件中当前的偏移量
  • void seek(long position)
    设置到此文件开头0到文件指针的偏移量,在该位置发生下一个读入或写入操作
  • int skipBytes(int n)
    用此方法可以跳过一些少量的字节,可以正数,但不可以负数

字节流

  • 字节流:可以从或向一个特定的方向读写数据,数据是字节
  • 封装流/处理流:针对自接力进行封装,即对一个已经存在的流进行封装,通过所有的封装流能够对数据更有效的读和写,封装流底层还是字节流
  • 通常字节流被称之为低级流
  • 处理流被称之为高级流或过滤流

InputStream

InputStream是所有的字节流的父类,其定义了基础的读取方法

  • int read()
    读取一个字节,以int的形式返回,该int的低八位有效
    否则返回-1,表示文件末尾EOF end of file
  • int read(byte[] b)
    尝试最多读取给数组length个字节,并存入该数组
    返回值为实际读取的字节量的长度,否则返回-1,到文件末尾
  • int read(byte[] b,int offset,int len)
    将输入流中的最多len个数据写入byte数组
    将从offset位置开始写入数组,len不能超过数组的长度
    如果超过会报数组的下标越界异常
  • void close();
    关闭此流,并示范与该流关联的所有的系统资源

OutputStream

是所有的字节流的父类,其定义了基础的写出写法

  • void write(int d)写出整型数据的低八位
  • void write(byte[] b)将给定的字节数组的数据全部写出
  • void write(byte[] b,int offset ,int len)将给定的字节数组从偏移量offset开始的len个字节写入输出流
  • void flush() 刷新此输出流并强制写出所有的缓冲的输出字节
  • void close() 关闭此输出流并释放与此输出流有关的所有的系统资源

FileInputStream:文件输入流

  • 可以操作文件的内容
  • 操作的是字节流
  • 记仇InputStream抽象类
  • 低级流
  • 操作的是文件

FileOutputStream:文件输出流

  • 可以操作文件的内容
  • 操作的是字节流
  • 继承自OutputStream抽象类
  • 低级流
  • 操作的是文件

缓冲流:Buffer缓冲 高级流之一

  • 缓冲流的原理:
    相应键存储设备操作数据导致增大和硬件的交互次数
    会降低读写的速度,做缓冲流的目的就是为了尽量减少和硬件的交互次数

  • 缓冲输出流原理:
    BufferedOutputStream缓冲输出流内部会维护一个缓冲区
    每当我们想该流写出数据时,都会先将数据存入缓冲区
    当缓冲区已满时,缓冲流会将数据一次性写出

  • 注意:
    void flush(),清除缓冲区,将缓冲区中的数据强制写出以保证数据完整

  • 缓冲输入流原理:
    BufferedInputStream缓冲输入流,内部会维护一个缓冲区
    每当我们想向该流读入数据时,都会先将数据存入缓冲区
    当BufferedInputStream的read方法会从缓冲区读取数据
    当缓冲区全部读取完毕,如果再次read的时候,会再一次把缓冲区填满
    read在注意从缓冲区中读取数据,以此往复

  • 缓冲是靠牺牲内存来提升IO的读写效率

  • 对象流:高级流之一,把内存的对象数据,序列化到硬盘上,也可以把硬盘上的文件反序列化到内存的对象

  • 序列化:把内存的对象序列化到硬盘上,一字节的方式体现

  • 反序列化:把硬盘上的字节序列反序列化会内存中的对象

  • 比如:

Student stu=new Student("张三",20,"S001");
 stu-->硬盘上(序列化)-->内存堆中出现stu对象(反序列化)

注意

如果要实现对象的序列化和反序列化
就必须对序列化的对象所对应的类实现java.io.Serializable接口
且类中最好给提供一个,long类型的序列化的版本号
比如:
``
public class Student implements Serializable{
private static final long serialVersionUID=1L;
filled 属性
method 方法

}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值