java学习3

来源:互联网 发布:linux怎么禁ping 编辑:程序博客网 时间:2024/06/05 22:52

1.java中的编码问题
在用eclipse创建项目时,如果选择的编码方式是gbk,那么在将字符串>>字节时,默认情况下也是按照GBK的规则进行转换的,所以对于一个字符串按照utf-8编码规则获取的字节序列,还是按照默认条件转换,是会出现乱码的。
gbk(汉字2个字节,英文1个字节)
utf-8(汉字3个字节,英文1个字节)
java编码方式即utf-16be(汉字2个字节,英文2个字节)
2.File类
File对象中存放的是文件(文件夹)的名称,大小等一些属性信息
mkdir()//创建文件夹
createNewFile();//创建新文件
isExists()//是否存在
isFile()//是否是文件
isDirectory()//是否是文件夹
3.RandomAccessFile类
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官方说明)

4.字节流操作
FileOutputStream(write()方法)和FileInputStream(read()方法)
DataOutputStream和DataInputStream
BufferedOutputStream和BufferedInputStream
5.字符流
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 —->写一行
6**重点内容**.对象的序列化,反序列化
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)序列化中 子类和父类构造函数的调用问题
a)如果父类实现序列化接口,子类不需要再实现,并且在子类反序列化的时候,不会调用构造函数(子类和父类的都不会调用)
b)如果父类没有实现序列化接口,而子类想要完成序列化,子类必须实现序列化接口,这种情况下,在对子类反序列化时,不会调用子类的构造函数,但会调用父类的构造函数

0 0