1.字节流(缓冲)
父类: InputStream/OutputStream
FileInputStream("相对路径") - 输入流
read() - 读单个字节
read(byte[]) - 字节数组
FileOutputStream("相对路径",true) - 输出流
write(int)
write(byte[])
write(bute[],int off, int len)
缓冲字节流:
BufferedInputStream(底层字节流)
BufferedOutputStream(底层字节流)
字节流作用: 文件的复制
2.字符流(缓冲)
Reader/Writer
底层流:
InputStreamReader(底层字节流)
OutputStreamWriter(底层字节流,"GBK")
缓冲流:
BufferedReader(底层字符流)
PrintWriter( - 是否刷新缓冲区
new OutputStreamWriter - 指定编码方式
new FileOutputStream - 是否进行追加
)
3.对象流
1.父类:InputStream/OutputStream
2.序列化
1).对象 -> 文件[字节]
2).Serializable - 接口
a.接口中没有常量,也没有抽象方法,是个空接口
b.作用:用于标记是可序列化的
3)关键词:
serialVersionUID: 给类添加固定的序列版本号
①.变量必须是long类型修饰
②.必须是public static final修饰
③.序列化后的版本编号,不指定的话,会自动生成一串新的序列号,是随着类的内容改变而改变
transient:
①.用于修饰变量,在序列化的时候,值会被忽略
②.使用场景:在传输的过程中,不想别人看到的属性值就是用transient
反序列化
文件[字节] -> 对象
3.子类/实现类:
1).ObjectInputStream
(1)创建:
new ObjectInputStream(底层字节流)
(2)常用API:
Object readObject()
ObjectOutputStream
(1)创建
new ObjectOutputStream(底层字节流)
(2)常用API:
void writeObject(Object obj)
RandomAccessFile - 文件的[随机]访问
1.随机:操作文件的位置 -> pointer
1.获取当前指针位置
2.跳过对应的字节数 -> 顺序
3.跳转到指定的指针位置
2.特点:
a.基于文件指针的操作,是一个可读可写的类
b.文件指针停留在哪儿,就可以操作文件的那个位置
c.也可以手动指定文件指针的位置
3.创建:
new RandomAccessFile(“文件路径”,“模式”)
模式:
r - 读
w - 写
rw - 可读可写
4.指针位置的操作:
void skipBytes(跳过字节个数)
long getFilePointer() - 获取当前指针位置
void seek() - 定位到文件指定的位置
5.读写特定字节:
readInt()/readLong()
writeInt()/writeLong()