Java基础知识章节梳理(二十一)

文字数:约2100字  阅读时间:30分钟

此文章为学习总结类型,文字很多且皆为基础知识

 

 1. 字符流

1.1 介绍

为了方便程序员操作文本文件专门定义了一个字符流体系,顶层分别为Reader(字符输入流)和Writer(字符输出流)

字符流=字节流+编码表

1.2字符编码表

1.2.1介绍

其实就是生活中字符和计算机二进制的对应关系表。

就是人为规定的一张数字与符号相互对应的表,可以让计算机识别人类的语言

1.2.2编码表

1、ascii: 一个字节中的 7 位就可以表示。对应的字节都是正数。0-xxxxxxx

2、iso-8859-1:拉丁码表 latin,用了一个字节用的 8 位。1-xxxxxxx 负数。

3、GB2312:简体中文码表。包含 6000-7000 中文和符号。用两个字节表示。两个字节都是开头为 1 ,两个字节都是负数。

4.GBK:目前最常用的中文码表,2万的中文和符号。用两个字节表示,其中的一部分文字,第一个字节开头是1,第二字节开头是0

5、GB18030:最新的中文码表,目前还没有正式使用。

6、unicode(万国码表):国际标准码表:无论是什么文字,都用两个字节存储。

7、UTF-8:基于 unicode,一个字节就可以存储数据,不要用两个字节存储,而且这个码表更加的标准化,在每一个字节头加入了编码信息(后期到 api 中查找)。

UTF-8中使用的是三个字节表示一个汉字

1.3编码解码

1.3.1 介绍

能识别中文的码表:GBK、UTF-8;正因为识别中文码表不唯一,涉及到了编码解码问题。

文字--->数字:(编码)

就是看能看懂内容,转换成看不懂的内容。

数字--->文字 : (解码)

是把看不懂的内容,转换成看懂的内容。

乱码:文件本身没有乱码,乱码只是一种解码解错误的现象(解码的时候用的编码表与当初写内容的时候用的不一样)

1.4 ANSI

1.4.1 介绍

类似于Java中的一个变量,代表本地编码格式

2. IO流回顾

2.1字节流

1. 字节输入流 InputStream 抽象类

FileInputStream 操作文件的字节输入流

BufferedInputStream 操作文件的字节输入流

2. 字节输出流 OuputStream 抽象类

FileOutputStream 操作文件的字节缓冲输出流

BufferedOutputStream 操作文件的字节缓冲输出流

2.2 字符流

1. 字符输入流 Reader 抽象类

FileReader 用来操作文件的字符输入流(简便的流)

操作字符的便捷类,默认使用系统编码读取文件的内容

Reader的子类是InputStreamReader,FileReader是InputStreamReader的子类

BufferedFileReader 用来操作文件的字符缓冲输入流

 2. 字符输出流 Writer 抽象类

FileWriter 用来操作文件的字符输出流(简便的流)

操作字符的便捷类,默认使用系统编码写入文件的内容

Writer的子类是OutputStreamWriter,FileWriter是OutputStreamWriter的子类

BufferedFileWriter 用来操作文件的字符输出流

2. IO转换流

2.1 介绍

转换流属于字符流的体系,按照方向可以分为输入转换流和输出转换流

转换流的特点是可以让程序员参与编码的控制

2.2 InputStreamReader字节转字符输入流

2.2.1 介绍

是字节流通向字符流的桥梁:它使用指定的字符编码表读取字节并将其解码为字符。

2.2.2 构造方法

InputStreamReader(InputStream in, String charsetName) :创建使用指定字符集的 InputStreamReader。

2.2.3 与字符输入流使用方法一致

2.3 OutputStreamWriter字符转字节输出流

2.3.1 介绍

是字符流通向字节流的桥梁:可使用指定的字符编码表,将要写入流中的字符编码成字节。

2.3.2 构造方法

OutputStreamWriter(OutputStream out, String charsetName) :创建使用指定字符集的 OutputStreamWriter。

2.3.3 与字符输出流使用方法一致

3. 序列化与反序列化

3.1 介绍

将Java程序运行期间的对象,保存到硬盘上的过程,称为序列化

将硬盘上的文件中保存的对象,读取到Java程序中的过程,称为反序列化

3.2 使用

3.2.1 序列化流ObjectOutputStream

1. 介绍

用于从流中读取对象的操作流

2. 构造方法

ObjectInputStream(InputStream in) :创建从指定 InputStream 读取的 ObjectInputStream。

3. 成员方法

writeObject(Object obj) :将指定的对象写入 ObjectOutputStream。

4. 注意事项

被写的对象,必须实现Serializable这个接口,否则报错

建议一个文件中只写一个对象

被写的对象的成员变量如果是引用数据类型也必须实现Serializable接口

3.2.2 反序列化流ObjectInputStream

1. 介绍

用于向流中写入对象的操作流

2. 构造方法

ObjectOutputStream(OutputStream out) :创建写入指定 OutputStream 的 ObjectOutputStream。

3. 成员方法

readObject() :从 ObjectInputStream 读取对象。

4. 注意事项

readObject方法当读不到对象的时候会抛出异常(可以用这个特性完成一个文件多个对象的读取)

3.2.3过程

序列化时,是将通过类创建的对象的信息封装到一个文件中去

反序列化时,是将文件中的信息通过类再重新创建出一个新的对象,然后返回给调用者

3.3 注意事项

使用关键字transiert修饰一个成员变量时,该成员变量的值将不会被序列化

使用static修饰的成员变量,也不会被序列化

当类序列化之后,不能修改对象的类的成员,否则读取的时候会抛出异常。解决方法

可以在类中添加一个常量来固定类的版本号即可解决这个问题

格式为:static final long serialVersionUID = 1L;

4. 打印流

4.1 介绍

打印流 添加输出数据的功能,使它们能够方便地打印各种数据值表示形式.

4.2 分类

4.2.1字节打印流 PrintStream

1. 介绍

PrintStream 为其他输出流添加了功能,使它们能够方便地打印各种数据值表示形式。(所见即所得)

 2. 特点

永远不会抛出IO异常

属于OutputStream的孙子类

 3. 构造方法

PrintStream(File file) :创建具有指定文件的新打印流。

PrintStream(File file, String csn) :创建具有指定文件名称和字符集的新打印流。 (csn:编码表名称)

PrintStream(OutputStream out) : 创建新的打印流。

PrintStream(OutputStream out, boolean autoFlush) :创建新的打印流。

PrintStream(OutputStream out, boolean autoFlush, String encoding) :创建新的打印流。

PrintStream(String fileName) :创建具有指定文件名称新打印流。

PrintStream(String fileName, String csn) :创建具有指定文件名称和字符集的新打印流。

4. 常用成员方法

print(Object obj) :打印对象。

println(Object x) :打印 Object,然后终止该行(换行)

打印流功能很强大,可以替换前面所有的输出流的功能

4.2.2 字符打印流 PrintWriter

1. 介绍

向文本输出流打印对象的格式化表现形式

2. 构造方法

PrintWriter(File file) :使用指定文件创建不具有自动行刷新的新 PrintWriter。

PrintWriter(File file, String csn) :创建具有指定文件和字符集且不带自动刷行新的新 PrintWriter。

PrintWriter(OutputStream out) :根据现有的 OutputStream 创建不带自动行刷新的新 PrintWriter。

PrintWriter(OutputStream out, boolean autoFlush) :通过现有的 OutputStream 创建新的 PrintWriter。

PrintWriter(String fileName) :创建具有指定文件名称且不带自动行刷新的新 PrintWriter。

PrintWriter(String fileName, String csn) :创建具有指定文件名称和字符集且不带自动行刷新的新 PrintWriter。

PrintWriter(Writer out) :创建不带自动行刷新的新 PrintWriter。

PrintWriter(Writer out, boolean autoFlush) : 创建新 PrintWriter。

3. 常用成员方法

print(Object obj) :打印对象。

println(Object x) :打印 Object,然后终止该行(换行)

4. 与PrintStream的区别

a. 在操作字符方面.PrintWriter比PrintWriter更加强大

b. PrintWriter不能对字节文件进行操作(例如:图片,音乐,视频等)

 

 

 

 

 

 

 

 

 

 

你可能感兴趣的:(java基础,java基础,入门学习)