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数据的方法

二、字符流

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   ---->写一行

三、对象的序列化,反序列化

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)序列化中 子类和父类构造函数的调用问题

对子类对象进行反序列化操作是,如果有父类没有实现序列化接口,那么其父类的构造函数会被调用。

最新文章

  1. submit text3常用快捷键
  2. MVC 缓存
  3. java 网络编程(一)---基础知识和概念了解
  4. adb命令大全「含shell和wait-for-devices等」
  5. Spring表达式语言 之 5.3 SpEL语法(拾肆)
  6. 【待填坑】bzoj上WC的题解
  7. nodejs广播
  8. Android应用发布后的统计——百度移动统计的应用
  9. 1213 How Many Tables(简单并查集)
  10. JavaScript面向对象轻松入门之封装(demo by ES5、ES6、TypeScript)
  11. 动态规划-迷宫-百度之星-Labyrinth
  12. MySQL中的字符串函数
  13. Java公开课-03.内部类
  14. 专注于C#.Net WPF软件开发-软件反编译-软件破解-逆向-靖芯科技-包括安卓APK反编译
  15. k8s网络之Calico网络
  16. 图片上传 new FormData() ,new FileReader()
  17. 安装owncloud出现:Error while trying to create admin user: An exception occurred while executing
  18. 各平台操作系统查询主机WWPN
  19. [转]BigDecimal不整除异常
  20. Bootstrap-Plugin:警告框(Alert)插件

热门文章

  1. Spring各个jar包详解
  2. python学习之路 七 :生成器、迭代器
  3. ItemContainerStyleSelector
  4. linux命令之系统管理命令(上)
  5. 2019 JUST Programming Contest J. Grid Beauty
  6. Deeplearning学习
  7. NOIP前的模板
  8. 玩转MongoDB
  9. linux命令行添加图形化界面
  10. 九校联考(DL24凉心模拟) 整除(中国剩余定理+原根性质)