- 序列化和反序列化:
序 列 化: 指把堆内存中的Java对象数据,通过某种方式以二进制形式把对象存储到磁盘文件中或者传递给其他网络的节点。反序列化:把磁盘文件中的对象数据或者把网络节点上的对象数据,恢复成Java对象的过程.
为什么要做序列化:
1):在分布式系统中,需要共享数据的JavaBean对象,都得做序列化,此时就得把对象数据转换为二进制形式.
以后存储在HttpSession中的对象,都应该实现序列化接口
2):服务钝化:如果服务发现某些对象好久都没有活动了,此时服务器就会把这些内存中的对象,持久化在本地磁盘文件中(Java对象-->二进制文件).
如果某些对象需要活动的时候,先从内存中去寻找,找到就使用,找不到再去磁盘文件中,反序列化我们得对象数据,恢复成Java对象.
需要做序列化的对象的类,必须实现序列化接口:java.io.Serializable接口(标志接口[没有抽象方法]). - 使用对象流来完成序列化和反序列化操作:
ObjectOutputStream: 通过writeObject方法做序列化操作的.
ObjectInputStream: 通过readObject方法做反序列化操作的. - 序列化的细节:序列化的版本:
1):如果某些数据不需要做序列化,比如密码,此时怎么办?
理论上说,静态的字段和瞬态的字段是不能做序列化操作的.
2):序列化的版本问题:
反序列化Java对象时必须提供该对象的class文件,但随着项目的升级,系统的class文件也会升级(增加一个字段/删除一个字段),java通过类中提供的一个固定的serialVersionUID(序列化版本号)来判断字节码是否发生改变. - 打印流,打印数据的,打印流只能是输出流:
PrintStream: 字节打印流
PrintWriter: 字符打印流
-对于PrintWriter来说,当启用自动刷新之后,调用println或者printf或者format方法,便会立马刷新操作.
如果没有开启自动刷新,则需要手动刷新或者当缓冲区满的时候,再自动刷新.
使用打印流作为输出流,此时的输出操作会特别简单,提供了println方法:打印再换行,可以支持打印/输出各种数据类型的数据 -
标准的IO:
标准的输入: 通过键盘录入数据给程序.
标准的输出: 在屏幕上显示程序数据.
在System类中有两个常量:
InputStream in = System.in;
PrintStream out = System.out;
标准流的重定向操作:
标准的输入: 通过键盘录入数据给程序.
重新指定输入的源不再是键盘,而是一个文件.
static void setIn(InputStream in) 重新分配“标准”输入流。
此后,System.in数据的来源就是通过setIn制定的源.
标准的输出: 在屏幕上显示程序数据.
重新指定输出的目标不再是屏幕,而是一个文件.
static void setOut(PrintStream out) 重新分配“标准”输出流。 -
java.util.Scanner类:扫描器类,表示输入操作,String数据时,hasNextLine(),nextLine();
存在的方法: xxx表示数据类型,如byte,int ,boolean等.
boolean hasNextXxx():判断是否有下一种类型的数据
Xxx nextXxx():获取下一个该类型的数据. -
数据流,提供了可以读/写任意数据类型的方法:
DataOutputStream: 提供了 writeXxx(xxx value)方法.
DataInputStream: 提供了 readXxx()方法.
注意: writeXxx和readXxx必须要对应起来, writeByte写出的数据,此时只能使用readByte读取回来. -
随机访问文件(RandomAccessFile):表示可以在该文件的任何位置写出和读取数据.
RandomAccessFile经常用来做多线程断点下载:
1):多线程
2):断点下载 -
管道流:实现两个线程之间的数据交互.
PipedInputStream
PipedOutputStream
PipedReder
PipedWriter -
日历类(Calendar):是抽象类,表示日历,比Date更强大.
Calendar c = Calendar.getInstance();
int get(int field) 返回当前日期的给定日历字段(年,月,日,时,分,秒)的值。
add(int YEAR,int 10); set(int MINUTE,int 0)
getTime(); setTime(); -
四大基流:
InputStream---- OutputStream
Reader ---- Writer文件流:
FileInputStream
FileOutputStream
FileReader
FileWriter缓冲流:
BufferedInputStream
BufferedOutputStream
BufferedReader
BufferedWriter转换流(把字节转换为字符):
InputStreamReader
OutputStreamWriter内存流(临时存储数据):
ByteArrayInputStream
ByteArrayOutputStream
CharArrayReader
CharArrayWriter
StringReader
StringWriter顺序流(合并流):
SequenceInputStream对象流(序列化和反序列化):
ObjectInputStream
ObjectOutputStream打印流:
PrintStream
PrintWriter数据流:
DataInputStream
DataOutputStream管道流:
PipedInputStream
PipedOutputStream
PipedReader
PipedWriter
------------------
File
FIlenameFilter
RandomAccessFile
Files -
-
day28—IO 3
最新推荐文章于 2024-05-08 23:00:04 发布