您的位置:首页 > 编程语言 > Java开发

java学习3

2015-08-26 14:30 405 查看
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)如果父类没有实现序列化接口,而子类想要完成序列化,子类必须实现序列化接口,这种情况下,在对子类反序列化时,不会调用子类的构造函数,但会调用父类的构造函数
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: