java.io.File类用于表示文件(目录)
File类只用于表示文件(目录)的信息(名称、大小等),不能用于文件内容的访问
RandomAccessFile java提供的对文件内容的访问,既可以读文件,也可以写文件。支持随机访问文件,可以访问文件的任意位置。
RandomAccessFile支持随机访问文件,可以访问文件的任意位置
(1)java文件模型
在硬盘上的文件时 byte byte byte存储的,是数据的集合
(2)打开文件
两种模式:“rw”(读写),“r”(只读)
RandomAccessFile raf = new RandomAccessFile(File,"rw")
文件指针,打开文件时指针在开头 pointer = 0;
(3)写方法:
raf.write(int)--->只写一个字节(后8位),同时指针指向下一个位置,准备再次写入
(4)读方法:
int b = raf.read()--->读一个字节
(5)文件读写完成以后一定要关闭(Oracle官方说明)
raf.close()
andomAccessFile java提供的对文件内容的访问,既可以读文件,也可以写文件。支持随机访问文件,可以访问文件的任意位置。
java文件模型
在硬盘上的文件时 byte byte byte存储的,是数据的集合
打开文件
两种模式:“rw”(读写),“r”(只读)
RandomAccessFile raf = new RandomAccessFile(File,"rw")
文件指针,打开文件时指针在开头 pointer = 0;
写方法:
raf.write(int)--->只写一个字节(后8位),同时指针指向下一个位置,准备再次写入
读方法:
int b = raf.read()--->读一个字节
文件读写完成以后一定要关闭
raf.close()
这里的0xff 可以把前面的0去掉
一次写一个字节(后八位) 这里后八位就可以表示这个'A'
第一次写完之后 文件里有一个字节 这个时候文件指针 raf 等于 1
这个randomaccessfile 只读写一个字节.
RandomAccessFile
RandomAccessFile:
打开文件的两种模式:(1):"rw"(读写);(2)"r"(只读)
write()写方法;
read()读方法;
文件读写完以后一定要关闭;
5.getFilePointer()方法获取字节指针
6.seek()读文件,必须把指针移到头部;
迅雷下载就会用到 类似 RandomAccessFile 这样的类.
RandomAccessFile 类的功能.
可读可写(别的不是只能写 就是只能读)
可以访问文件的任意位置
一点要close()
16进制方式输出
RamdomAcessFile基本操作重点
RandomAccessFile是Java提供的对文件内容的访问类,既可以读文件,也可以写文件
RandomACcessFile 支持随机访问文件,可以访问文件的任意位置
笔记 (基本操作)
RandomAccessFile是Java提供访问文件内容的类,既可以读文件也可以写文件
RandomAccessFile支持随机访问文件,可以访问文件的任意位置
java文件模型:
在硬盘上的文件是以byte存储的,是数据的集合
打开文件
有两种模式:rw(读写) 、r(只读)
RandomAccessFile raf = new RandomAccessFile(file,打开模式);
文件指针,打开文件时指针在文件的开头pointer = 0
写方法
raf.write(int)-->只写一个字节(后8位),同时指针指向下一个位置,准备再次写入
读方式
int b =raf.read()-->一次读一个字节
文件读完后一定要关闭(Oracle官方说明)
'A' <<-- 这样在java里表示的是一个Char
那byte呢...
由于java默认是"utf8"格式
所以视频里说的是"byte byte byte"储存的
因为utf8保存中文默认是三个字节 英文默认是一个字节
66666666
5555555555555
4444444444444444
3333333333333
111111111111111111111
1111111111111
java.io.File类用于表示文件(目录)
File类只用于表示文件(目录)的信息(名称、大小等),不能用于文件内容的访问
RandomAccessFile java提供的对文件内容的访问,既可以读文件,也可以写文件。
RandomAccessFile支持随机访问文件,可以访问文件的任意位置
java.io.File类用于表示文件(目录)
File类只用于表示文件(目录)的信息(名称、大小等),不能用于文件内容的访问
RandomAccessFile java提供的对文件内容的访问,既可以读文件,也可以写文件。
RandomAccessFile支持随机访问文件,可以访问文件的任意位置
java.io.File类用于表示文件(目录)
File类只用于表示文件(目录)的信息(名称、大小等),不能用于文件内容的访问
RandomAccessFile java提供的对文件内容的访问,既可以读文件,也可以写文件。
RandomAccessFile支持随机访问文件,可以访问文件的任意位置
(1)java文件模型
在硬盘上的文件是byte byte byte存储的,是数据的集合
(2)打开文件
有两种模式"rw"(读写) "r"(只读)
RandomAccessFile raf = new RandomeAccessFile(file,"rw")
文件指针,打开文件时指针在开头 pointer = 0;
(3) 写方法
raf.write(int)--->只写一个字节(后8位),同时指针指向下一个位置,准备再次写入
(4)读方法
int b = raf.read()--->读一个字节
(5)文件读写完成以后一定要关闭(Oracle官方说明)
序列化与基本类型序列化
1)将类型int 转换成4byte或将其他数据类型转换成byte的过程叫序列化
数据---->n byte
2)反序列化
将n个byte 转换成一个数据的过程
nbyte ---> 数据
3)RandomAccessFile提供基本类型的读写方法,可以将基本类型数据
序列化到文件或者将文件内容反序列化为数据
IO流(输入流、输出流)
字节流、字符流
1.字节流
1)InputStream、OutputStream
InputStream抽象了应用程序读取数据的方式
OutputStream抽象了应用程序写出数据的方式
2)EOF = End 读到-1就读到结尾
3)输入流基本方法
int b = in.read();读取一个字节无符号填充到int低八位.-1是 EOF
in.read(byte[] buf)
in.read(byte[] buf,int start,int size)
4)输出流基本方法
out.write(int b) 写出一个byte到流,b的低8位
out.write(byte[] buf)将buf字节数组都写入到流
out.write(byte[] buf,int start,int size)
5)FileInputStream--->具体实现了在文件上读取数据
6)FileOutputStream 实现了向文件中写出byte数据的方法
7)DataOutputStream/DataInputStream
对"流"功能的扩展,可以更加方面的读取int,long,字符等类型数据
DataOutputStream
writeInt()/writeDouble()/writeUTF()
8)BufferedInputStream&BufferedOutputStream
这两个流类位IO提供了带缓冲区的操作,一般打开文件进行写入
或读取操作时,都会加上缓冲,这种流模式提高了IO的性能
从应用程序中把输入放入文件,相当于将一缸水倒入到另一个缸中:
FileOutputStream--->write()方法相当于一滴一滴地把水“转移”过去
DataOutputStream-->writeXxx()方法会方便一些,相当于一瓢一瓢把水“转移”过去
BufferedOutputStream--->write方法更方便,相当于一飘一瓢先放入桶中,再从桶中倒入到另一个缸中,性能提高了
2.字符流
1) 编码问题
2)认识文本和文本文件
java的文本(char)是16位无符号整数,是字符的unicode编码(双字节编码)
文件是byte byte byte ...的数据序列
文本文件是文本(char)序列按照某种编码方案(utf-8,utf-16be,gbk)序列化为byte的存储结果
3)字符流(Reader Writer)---->操作的是文本文本文件
字符的处理,一次处理一个字符
字符的底层任然是基本的字节序列
字符流的基本实现
InputStreamReader 完成byte流解析为char流,按照编码解析
OutputStreamWriter 提供char流到byte流,按照编码处理
FileReader/FileWriter
字符流的过滤器
BufferedReader ---->readLine 一次读一行
BufferedWriter/PrintWriter ---->写一行
3.对象的序列化,反序列化
1)对象序列化,就是将Object转换成byte序列,反之叫对象的反序列化
2)序列化流(ObjectOutputStream),是过滤流----writeObject
反序列化流(ObjectInputStream)---readObject
3)序列化接口(Serializable)
对象必须实现序列化接口 ,才能进行序列化,否则将出现异常
这个接口,没有任何方法,只是一个标准
4) transient关键字
private void writeObject(java.io.ObjectOutputStream s)
throws java.io.IOException
private void readObject(java.io.ObjectInputStream s)
throws java.io.IOException, ClassNotFoundException
分析ArrayList源码中序列化和反序列化的问题
5)序列化中 子类和父类构造函数的调用问题
没看懂的可以来看一下
RandomAccessFile基本操作
RandomAccessFile基本操作
.seek(0)读文件,必须把指针移到头部
(v>>>24) & 0xFF 这是把v前面右移所产生的0去掉
raf.seek(0);RandomAccessFile的定位方法;