Java IO流基础知识

需要掌握的几个知识点
1、编码的问题
2、File类的使用
3、RandomAccessFile (java提供的对文件内容的访问类 可以读写文件 )
4、字节流
5、字符流
6、对象的序列化和反序列化

关于第一个编码的问题,详情可查阅百度
File类的构造函数以及下面的方法摘要可查看JDK帮助手册

一、RandomAccessFile类

简介: RandomAccessFile类支持随机访问文件,可以访问文件的任意位置

(1) Java文件模型

硬盘上的文件是 byte byte byte存储的,是数据的集合。

(2) 打开文件

有两种模式"rw"(读写) “r”(只读)

RandomAccessFile raf = new  RandomAccessFile (File file,"rw");

文件指针,打开文件时指针在开头 pointer = 0;

1.2.1. 读方法

raf .read()   -----> 读一个字节  例如 1111 1111 0000 1111这是两个字节 ,只会从 高位读取 1111 1111 这一个字节

1.2.2.写方法

raf .write(int w) -----> 只写一个字节(后8位),同时指针指向下一个位置,准备再次写入 

二、IO流

2.1字节流

2.1.1) InputStream 、 OutputStream

InputStream抽象了应用程序读取数据的方式
OutputStream抽象了应用程序写出数据的方式

2.2) EOF = End 读到-1就读到了结尾
2.3) 输入流基本方法

int b = in.read(); 读取一个字节无符号填充到int低八位. -1是EOF
in.read(byte[] buf);
in.read(byte[] buf,int start,int size);

2.4)输出流基本方法

out.write(int b); 写出一个byte到流,b的低八位
out.write(byte[] buf);将一个byte字节数组写入到流
out.write(byte[] buf,int start,int size);将一个byte字节数组写入到流 从start开始,长度为size

2.5) BufferedInputStream & BufferedOutputStream

这两个流类为IO提供了带缓冲区的操作,一般打开文件进行写入或读取操作时,都会加上缓冲,这种流模式提高了IO的性能。

关于文件的输出,附上个人理解: 从应用程序把输入放入文件,相当于把一缸水倒到另一缸水里去
FileOutputStream —> write()方法相当于一滴一滴的把水转移过去
DataOutputStream------>writeXXX()方法相当于一瓢一瓢的把水转移过去
BufferedOutputStream------>write()方法相当于一瓢一瓢先放入桶里,在从桶里倒过去,从而提高了性能

2.2 字符流(Reader Writer)
字符的处理,一次处理一个字符
字符的底层是基本的字节序列
字符流的基本实现

InputStreamReader   完成byte流解析为char流,按照编码解析
OutputStreamWriter 	提供char流到byte流,按照编码处理
FileReader/PrintWriter  ------->  写一行

2.3字符流的过滤器

BufferedReader  --------> readLine  一次读一行
BufferedWriter/PrintWriter	-------> 写一行

三、序列化

1.对象的序列化

对象的序列化就是将Object转换成byte序列

2.对象的反序列化

对象的反序列化就是将byte序列转换成Object

3.序列化接口(Serializable)

对象必须实现序列化接口才能序列化,否则将抛出异常,这个接口没有任何方法,只是一个标准

4.关键字:transient   不进行默认的序列化操作

private void writeObject(java.io.ObjectOutputStream s)    
可以进行序列化操作

pviate void readObject(java.io.ObjectInputStream s)
可以进行反序列化操作

关于序列化的一些知识点:
对子类对象进行反序列化操作时,如果其父类没有实现序列化接口,那么父类的构造函数将会被调用。
反之如果实现了序列化接口,那么父类的构造函数将不会被调用

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值